How many times a number appears in a numpy array
Solution 1
You should be able to get this pretty simply:
list(m.flatten()).count(x)
Another option which is probably faster, is to use the numpy builtin count_nonzero()
:
np.count_nonzero(m == x)
Hooray builtin functions.
Solution 2
You can use sum
function:
In [52]: m = np.random.randint(0,9,(4,4))
In [53]: m
Out[53]:
array([[8, 8, 2, 1],
[2, 7, 1, 2],
[8, 6, 8, 7],
[5, 2, 5, 2]])
In [56]: np.sum(m == 8)
Out[56]: 4
m == 8
will return a boolean array contains True for each 8 then since python evaluates the True as 1 you can sum up the array items in order to get the number of intended items.
Solution 3
If you want to get the frequency from all matrix elements, here's a simple solution using numpy.ndarray.flatten and collections.Counter:
import numpy as np
import collections
p = int(input("Length of matrix: "))
m = np.random.randint(0, 9, (p, p))
print(m)
print(collections.Counter(m.flatten()))
For example, when p=3 you'd get something like this:
[[8 4 8]
[5 1 1]
[1 1 1]]
Counter({1: 5, 8: 2, 4: 1, 5: 1})
Solution 4
You can flatten the matrix and then use the list count()
method:
from collections import Counter
import numpy as np
p = int(input("Length of matrix: "))
m = np.random.randint(0,9,(p,p))
print(m)
flat = [item for sublist in m for item in sublist]
flat.count(4)
Teddy
Updated on June 17, 2022Comments
-
Teddy almost 2 years
I need to find a way to count how many times each number from 0 to 9 appears in a random matrix created using
np.random.randint()
import numpy as np p = int(input("Length of matrix: ")) m = np.random.randint(0,9,(p,p)) print(m)
For example if length of matrix = 4
- [[3 4 6 5] [3 4 4 3] [4 2 4 8] [6 8 2 7]]
How many times does the number 4 appear? It should return 5.
-
TemporalWolf over 7 yearsCounting a list is even easier than that:
flat.count(x)
is sufficient. -
TemporalWolf over 7 yearsAlso, numpy has a flatten:
list(m.flatten()).count(x)
-
rofls over 7 yearsI'm curious which method is faster, since you still have to convert this to a list @TemporalWolf
-
TemporalWolf over 7 yearsUsually built-in functions are faster than custom ones. You're welcome to
timeit
-
Daniel over 7 years@TemporalWolf This is incorrect, NumPy functions will be much faster than built in Python functions if the array is of a relevant size.
-
TemporalWolf over 7 years@Daniel I was including the numpy built-ins (like
flatten
), comparing them to rofls' custom list comprehension solution. -
Iluvatar about 3 yearsThis code does not count given number in array but all unique elements
-
Shaig Hamzaliyev about 3 yearsChanged it. Hope it works now. Thanks for pointing it out