How to use Numpy to vectorize this for loop?
count=0
arr1 = np.random.rand(184,184)
for i in range(arr1.size[0]):
for j in range(arr1.size[1]):
if arr1[i,j] > 0.6:
count += 1
print count
I tried:
count=0
arr1 = np.random.rand(184,184)
mask = (arr1>0.6)
indices = np.where(mask)
print indices , len(indices)
I expected len(indices) to give count, but it didn't. Any suggestions please.
Method 4: Count occurrences of an element in a list Using countof() Operator. countOf() is used for counting the number of occurrences of b in a. It counts the number of occurrences of value.
Count the number of elements satisfying the condition for the entire ndarray. The comparison operation of ndarray returns ndarray with bool ( True , False ). Using np. count_nonzero() gives the number of True , i.e., the number of elements that satisfy the condition.
NumPy: count() function count() function returns an array with the number of non-overlapping occurrences of substring sub in the range [start, end]. Input an array_like of string or unicode. The substring to search for.
np.count_nonzero
should be a bit faster than the sum:
np.count_nonzero(arr1 > 0.6)
In fact, it is three times as fast
>>> from timeit import repeat
>>> kwds = dict(globals=globals(), number=10000)
>>>
>>> arr1 = np.random.rand(184,184)
>>>
>>> repeat('np.count_nonzero(arr1 > 0.6)', **kwds)
[0.15281831508036703, 0.1485864429268986, 0.1477385900216177]
>>> repeat('(arr1 > 0.6).sum()', **kwds)
[0.5286932559683919, 0.5260644309455529, 0.5260107989888638]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With