例如,如果我有:如何計算元素的矢量的NUM與numpy的蟒蛇
a=np.array([[1,1,4,1,4,3,1]])
我們可以看到,我們有數字1的四倍,4號兩次,3只的。
我想有以下結果:
array(4,4,2,4,2,1,4)
正如你可以看到:每個單元由計數的它的元素所取代。
我該如何以最有效的方式做到這一點?
例如,如果我有:如何計算元素的矢量的NUM與numpy的蟒蛇
a=np.array([[1,1,4,1,4,3,1]])
我們可以看到,我們有數字1的四倍,4號兩次,3只的。
我想有以下結果:
array(4,4,2,4,2,1,4)
正如你可以看到:每個單元由計數的它的元素所取代。
我該如何以最有效的方式做到這一點?
一個vectorized
方法與np.unique
和np.searchsorted
-
# Get unique elements and their counts
unq,counts = np.unique(a,return_counts=True)
# Get the positions of unique elements in a.
# Use those positions to index into counts array for final output.
out = counts[np.searchsorted(unq,a.ravel())]
採樣運行 -
In [86]: a
Out[86]: array([[1, 1, 4, 1, 4, 3, 1]])
In [87]: out
Out[87]: array([4, 4, 2, 4, 2, 1, 4])
按照從@Jaime的評論,你可以使用np.unique
單獨像這樣 -
_, inv_idx, counts = np.unique(a, return_inverse=True, return_counts=True)
out = counts[inv_idx]
from collections import Counter
ctr = Counter(a.flat)
result = np.array([ctr[i] for i in a.flat])
如果你希望你的result
具有相同的尺寸a
,使用reshape
:
result = result.reshape(a.shape)
我試圖既numpy的和計數器相結合:
from collections import Counter
a=np.array([[1,1,4,1,4,3,1]])
# First I count the occurence of every element and stor eit in the dict-like counter
# Then I take its get-method and vectorize it for numpy-array usage
vectorized_counter = np.vectorize(Counter(a.flatten()).get)
vectorized_counter(a)
出:
array([[4, 4, 2, 4, 2, 1, 4]])
[numpy:數組中唯一值的頻率計數]的可能重複(http://stackoverflow.com/questions/10741346/numpy-frequency-counts-for-unique-values-in-an-array) –