这是基于2018-10年度提出的这个问题。
考虑下面的代码。三种简单的函数可以计算NumPy 3D数组(1000×1000×1000)中的非零元素。
import numpy as np
def f_1(arr):
return np.sum(arr > 0)
def f_2(arr):
ans = 0
for val in range(arr.shape[0]):
ans += np.sum(arr[val, :, :] > 0)
return ans
def f_3(arr):
return np.count_nonzero(arr)
if __name__ == '__main__':
data = np.random.randint(0, 10, (1_000, 1_000, 1_000))
print(f_1(data))
print(f_2(data))
print(f_3(data))
Run Code Online (Sandbox Code Playgroud)
我的机器上的执行阶段(Python 3.7.?、Windows 10,NumPy 1.16。?):
%timeit f_1(data)
1.73 s ± 21.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit f_2(data)
1.4 s ± 1.36 …Run Code Online (Sandbox Code Playgroud)