使用numpy查找数组中非零值的数量

时间:2014-10-10 18:53:15

标签: python numpy

我经常需要找到满足大型1D数组值的某些条件的值的数量。通过一些试验和错误,我最终得到了以下方法:

import numpy as np
a = np.random.random_sample(500000)  # just some trial data

num_above_half = len(np.nonzero(a > 0.5)[0])

等效方法:

num_above_half = sum(a > 0.5)

在我的机器上慢了近300倍。第一种方法很好,但语法有点混乱,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

对计算特定条件的不同等效方法进行基准测试表明np.count_nonzero是最快的。

In [2]: %timeit len(np.nonzero(a > 0.5)[0])
100 loops, best of 3: 2.24 ms per loop

In [3]: %timeit sum(a > 0.5)
1 loops, best of 3: 1.23 s per loop

In [4]: %timeit (a > 0.5).sum()
1000 loops, best of 3: 906 µs per loop

In [5]: %timeit np.count_nonzero(a > 0.5)
1000 loops, best of 3: 266 µs per loop

答案 1 :(得分:0)

我没有对任何事情进行基准测试,但是np.count_nonzero呢?