如果我有擴展基於標籤
a1 = np.array([1,2,3,4])
a2 = np.array(list('abcd'))
b2 = np.array(list('aabcccdd'))
numpy的陣列我怎麼到B1這應該是
array([1, 1, 2, 3, 3, 3, 4, 4])
編輯:換句話說,a1
值對應於a2
「標籤」和我想要生成對應於b2
的值。
如果我有擴展基於標籤
a1 = np.array([1,2,3,4])
a2 = np.array(list('abcd'))
b2 = np.array(list('aabcccdd'))
numpy的陣列我怎麼到B1這應該是
array([1, 1, 2, 3, 3, 3, 4, 4])
編輯:換句話說,a1
值對應於a2
「標籤」和我想要生成對應於b2
的值。
假設a2
進行排序,在這裏,人們使用np.searchsorted
是 -
a1[np.searchsorted(a2,b2)]
採樣運行 -
In [145]: a1 = np.array([1,2,3,4])
...: a2 = np.array(list('abcd'))
...: b2 = np.array(list('aabbccdd'))
...:
In [146]: a1[np.searchsorted(a2,b2)]
Out[146]: array([1, 1, 2, 2, 3, 3, 4, 4])
因爲當a2
沒有排序,我們需要在sorter
參數帶來的一般情況 -
In [148]: np.random.shuffle(a2)
In [149]: a2
Out[149]:
array(['b', 'd', 'c', 'a'],
dtype='|S1')
In [152]: sidx = a2.argsort()
In [155]: a1[sidx[np.searchsorted(a2,b2, sorter=sidx)]]
Out[155]: array([4, 4, 1, 1, 3, 3, 2, 2])
個Numpys內置函數numpy.repeat
和numpy.tile
非常適合這種工作。
例子:
import numpy as np
arr = np.array((1, 2, 3, 4))
print(arr)
[1, 2, 3, 4]
print(numpy.repeat(arr, 2))
[1, 1, 2, 2, 3, 3, 4, 4]
print(numpy.tile(arr, 2))
[1, 2, 3, 4, 1, 2, 3, 4]
我認爲人們會很容易混淆與具有'b2'簡單地擴展「雙」爲每一個元素的樣本。或者你真的有這樣一個簡單的實際案例嗎? – Divakar
不,你說得對。我會編輯它更清晰 – Tony
只是,使用更有代表性的示例。 – Divakar