计算满足条件的元素数的Numpy掩码

2024-05-15 21:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用Numpy将此for循环矢量化?

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

我试过:

count=0
arr1 = np.random.rand(184,184)
mask = (arr1>0.6)
indices = np.where(mask)
print indices , len(indices) 

我原以为len(指数)会算数,但没算数,请你提些建议。


Tags: innumpyforsizelencountnprange
3条回答

您还可以使用Numpy的size属性数组:

arr1 = np.random.rand(184,184)

arr1[ arr1 > 0.6 ].size

np.count_nonzero应该比总和快一点:

np.count_nonzero(arr1 > 0.6)

事实上,它的速度是

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

获取一个布尔掩码,然后计算“真”数:

(arr1 > 0.6).sum()

相关问题 更多 >