How to count num of elements vector with numpy python

爷,独闯天下 提交于 2021-02-05 06:01:04

问题


For example if i have:

a=np.array([[1,1,4,1,4,3,1]])

We can see that we have the number 1 four times, the number 4 twice and 3 only ones.

I want to have the following result:

array(4,4,2,4,2,1,4)

As you can see: each cell is replaced by the count of it's element.

How can i do it in the best efficient way?


回答1:


One vectorized approach with np.unique and 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())]

Sample run -

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])

As per the comments from @Jaime, you can use np.unique alone like so -

_, inv_idx, counts = np.unique(a, return_inverse=True, return_counts=True)
out = counts[inv_idx]



回答2:


Use a collections.Counter:

from collections import Counter
ctr = Counter(a.flat)
result = np.array([ctr[i] for i in a.flat])

If you want your result to have the same dimensions as a, use reshape:

result = result.reshape(a.shape)



回答3:


I tried to combine both numpy and Counter:

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)

Out:

array([[4, 4, 2, 4, 2, 1, 4]])


来源:https://stackoverflow.com/questions/31499988/how-to-count-num-of-elements-vector-with-numpy-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!