有人可以解释为什么我在阵列分配期间获得如此奇怪和不同的时间,结果是分配稍大一些数组并切片的速度 25x 快,而不是分配所需大小的数组:
%timeit arr = np.zeros((360, 360))
207 µs ± 4.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
arr = np.zeros((362, 362))
arr = arr[:360]
8.4 µs ± 651 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
是否存在一些普遍存在的问题,或者是与Windows相关的问题?虽然这种情况特定在我的计算机上 (360, 360) size
附近,但我不知道是否会出现在其他地方。
编辑:虽然此问题被标记为重复,但该问题的答案并未完全解释问题:
%timeit -n10 -r10 arr = np.zeros((361, 361))
243 µs ± 56.6 µs per loop (mean ± std. dev. of 10 runs, 10 loops each)
%timeit -n10 -r10 arr = np.zeros((362, 362))
6.82 µs ± 539 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
zeros
有 25-35x 回归,但 empty
的情况则相反 2-5x :
%timeit -n10 -r10 arr = np.empty((361, 361))
2.49 µs ± 1.02 µs per loop (mean ± std. dev. of 10 runs, 10 loops each)
%timeit -n10 -r10 arr = np.empty((362, 362))
11.9 µs ± 1.58 µs per loop (mean ± std. dev. of 10 runs, 10 loops each)
Windows 7
Python 3.6.3
numpy 1.13.3