Mik*_*ike 1 python numpy python-2.7
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
这返回True。但是,计时功能%timeit给出了截然不同的结果:
%timeit z = np.zeros(r.shape)
Run Code Online (Sandbox Code Playgroud)
10000次循环,最佳3:每个循环143 µs
%timeit e = np.empty(r.shape)
Run Code Online (Sandbox Code Playgroud)
1000000循环,最佳3:每个循环1.83 µs
上面引用的先前接受的答案说,这np.zeros始终是更好的选择,并且它也更快。
为什么不使用比np.zeros快80倍并返回相同答案的np.empty?
编辑
正如user2285236指出,翻转初始化的顺序z和e将打破平等,因为它会覆盖在相同的存储区。
np.empty并np.zeros做不同的事情。
np.empty从可用的内存空间创建一个数组,将所有碰巧挂在内存中的值保留为值。 这些值可以为零,也可以不为零。
np.zeros从可用内存空间创建一个数组,然后为您选择的dtype填充零。显然np.zeros必须做更多的工作,所以它应该慢一些,因为它还会写入分配的内存。
一个更公平的比较会之间np.empty和np.ndarray。