有效地计算numpy数组中的零元素?

2024-09-27 09:32:39 发布

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

我需要计算numpy数组中零元素的数量。我知道numpy.count_nonzero函数,但似乎没有用于计算零元素的模拟函数。

我的数组不是很大(通常少于1E5个元素),但是这个操作执行了数百万次。

当然,我可以使用len(arr) - np.count_nonzero(arr),但我想知道是否有一种更有效的方法来做到这一点。

以下是我目前的做法:

import numpy as np
import timeit

arrs = []
for _ in range(1000):
    arrs.append(np.random.randint(-5, 5, 10000))


def func1():
    for arr in arrs:
        zero_els = len(arr) - np.count_nonzero(arr)


print(timeit.timeit(func1, number=10))

Tags: 函数inimportnumpy元素forlencount
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:39

稍微快一点的方法是只使用^{}但根据需要使用条件。

In [3]: arr
Out[3]: 
array([[1, 2, 0, 3],
      [3, 9, 0, 4]])

In [4]: np.count_nonzero(arr==0)
Out[4]: 2

In [5]:def func_cnt():
            for arr in arrs:
                zero_els = np.count_nonzero(arr==0)
                # here, it counts the frequency of zeroes actually

您也可以使用^{},但它比^{}

In [6]: np.where( arr == 0)
Out[6]: (array([0, 1]), array([2, 2]))

In [7]: len(np.where( arr == 0))
Out[7]: 2

效率:(降序)

In [8]: %timeit func_cnt()
10 loops, best of 3: 29.2 ms per loop

In [9]: %timeit func1()
10 loops, best of 3: 46.5 ms per loop

In [10]: %timeit func_where()
10 loops, best of 3: 61.2 ms per loop

相关问题 更多 >

    热门问题