numpy中数组分配期间的奇怪行为

god*_*ygo 5 python windows arrays memory-management numpy

有人可以解释为什么我在数组分配期间获得如此奇怪和不同的时间,结果是分配稍大一些数组并切片它比分配所需大小的数组要快25倍:

%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)
Run Code Online (Sandbox Code Playgroud)

是否有一些普遍背后的东西,或者是一些与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)
Run Code Online (Sandbox Code Playgroud)

zeros25-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)
Run Code Online (Sandbox Code Playgroud)

Windows 7
Python 3.6.3
numpy 1.13.3