我正在使用numpy 1.14.3版本和python 2.7.12版本。
参考这个问题,我发现使用np.zeros和np.empty初始化数组的速度差异很大,但输出结果是相同的。
import numpy as np
r = np.random.random((50, 100, 100))
z = np.zeros(r.shape)
e = np.empty(r.shape)
np.allclose(e, z)
这返回True
。然而,计时函数%timeit
给出非常不同的结果:
%timeit z = np.zeros(r.shape)
进行10000次循环,最佳结果为3次测试的平均每次143微秒。
%timeit e = np.empty(r.shape)
1000000次循环,3次取最佳结果:每次循环1.83微秒
以上提到的先前被接受的答案指出,np.zeros
始终是更好的选择,而且速度更快。
既然np.empty比np.zeros快80倍并且返回相同的答案,为什么不使用它呢?
编辑:
正如user2285236所指出的那样,颠倒初始化z
和e
的顺序会破坏相等性,因为它会覆盖同一内存区域。
np.empty
不保证返回一个全是零的数组。 - user2357112np.empty
返回值归零。 - user2357112z = np.zeros(r.shape)
之后立即调用了np.empty
。改变顺序,你就不会再得到np.allclose
的True了。 - ayhan