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

时间:2017-12-21 21:26:01

标签: python arrays windows numpy memory-management

有人可以解释为什么我在阵列分配期间获得如此奇怪和不同的时间,结果是分配稍大一些数组并切片的速度 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

0 个答案:

没有答案