我正在jupyter笔记本中执行一些单元格的代码计时,我在写一个numpy数组的片段,发现与原始的组合代码相比,分解代码会产生不同的处理时间。
下面是一个最小的示例代码。 首先设置一些值:
import numpy as np
V=10000
K=1000
zrs=np.random.random(V)
然后计时完整代码:
%%timeit
a=np.zeros(V*K)
for n in range(0,K):
a[n*V:(n+1)*V]=zrs
返回: 每个循环 45.6 ms±2.82 ms(平均值±标准偏差,7次运行,每次10次循环)
但是,如果我在单独的单元格中运行代码,我会得到:
%%timeit
a=np.zeros(V*K)
每循环307μs±2.33μs(平均值±标准偏差,7次运行,每次1000次循环)
并首先声明'a':
a=np.zeros(V*K)
然后在代码的第二部分运行timeit:
%%timeit
for n in range(0,K):
a[n*V:(n+1)*V]=zrs
每循环9.52 ms±214μs(平均值±标准偏差,7次运行,每次100次循环)
要结束运行完整代码,我得到~46ms并在不同的段中运行代码我得到~10ms!
为什么呢?我很迷惑! 运行代码时我能期待什么?
帮助赞赏:)
Python 3.6.3,jupyter notebook 5.0.0