Count an element in numpy array
Here are the different ways we can count the occurrence of an element in a numpy array !
Here are the different ways you can count the occurrence of an element in a numpy array.
The non-numpy way
Here are the ways we can calculate the occurrence of various elements in a numpy array without using the inbuilt methods
Method 1: convert array to python list
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> lst = list(arr)
>>> lst.count(0)
4
>>> lst.count(2)
7
>>> lst.count(5)
0
Method 2: using collections.counter
>>> import collections, numpy
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> collections.Counter(arr)
Counter({2: 7, 0: 4, 3: 3, 1: 1})
Method 3: using dictionary comprehension
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> counts = {int(value): list(arr).count(value) for value in set(arr)}
>>> counts
{0: 4, 1: 1, 2: 7, 3: 3}
The numpy way
These are the different ways we can find occurrence of any element in a numpy element using the unbuilt methods.
Method 1: using count_nonzero
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> np.count_nonzero(arr == 0)
4
>>> np.count_nonzero(arr == 2)
7
>>> np.count_nonzero(arr == 5)
0
Method 2: using sum
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>>
>>> (arr == 0).sum()
4
>>> (arr == 2).sum()
7
>>> (arr == 5).sum()
0
Method 3: using unique
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>>
>>> unique, counts = np.unique(arr, return_counts=True)
>>> dict(zip(unique, counts))
{0: 4, 1: 1, 2: 7, 3: 3}
Method 4: using where
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> len(np.where(arr==0.)[0])
4
>>> len(np.where(arr==2.)[0])
7
>>> len(np.where(arr==5.)[0])
0
Method 5: using bincount
>>> import numpy as np
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 0])
>>> np.bincount(arr, minlength=np.size(arr))
array([4, 1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>>
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 100])
>>>
>>> np.bincount(arr, minlength=np.size(arr))
array([3, 1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
The bincount
method works only for integer values and outputs a list of count for each variable in the array. 0th index gives count of element 0, 5th index will give the count of element 5 and so on. In the second example I showed, as I added 100 to the list, the output array size increased to add the count for element 100.
While this might not be a feasible option in case of large integer values, it still is an interesting way to find the count of elements.
The Pandas way !
>>> import numpy as np
>>> import pandas as pd
>>>
>>> arr = np.array([1, 2, 2, 2, 2, 0, 2, 3, 3, 3, 0, 0, 2, 2, 100])
>>> pd.Series(arr).value_counts()
2 7
0 3
3 3
1 1
100 1
dtype: int64
What other ways can we count elements in a numpy array?