Gab*_*iel 19 python arrays performance numpy multidimensional-array
我需要计算numpy数组中零元素的数量.我知道numpy.count_nonzero函数,但似乎没有用于计算零元素的模拟.
我的数组不是很大(通常小于1E5元素),但操作执行了数百万次.
当然我可以使用len(arr) - np.count_nonzero(arr),但我想知道是否有更有效的方法来做到这一点.
这是我目前如何做的MWE:
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))
Run Code Online (Sandbox Code Playgroud)
kma*_*o23 29
稍快一点的方法就是根据需要使用np.count_nonzero()条件.
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
Run Code Online (Sandbox Code Playgroud)
你也可以使用,np.where但它比它慢np.count_nonzero()
In [6]: np.where( arr == 0)
Out[6]: (array([0, 1]), array([2, 2]))
In [7]: len(np.where( arr == 0))
Out[7]: 2
Run Code Online (Sandbox Code Playgroud)
效率:(按降序排列)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38256 次 |
| 最近记录: |