numpy 数组使用比应有的更多的循环. 为什么?


%timeit [i **2  for i in range(1000)]
print('*******')
%timeit np.arange(1000) ** 2

指纹:

1000 loops, best of 3: 376 µs per loop
*******
The slowest run took 11.43 times longer than the fastest. This could 
mean that an intermediate result is being cached.
100000 loops, best of 3: 2.76 µs per loop

我的直觉是 numpy 应该遍历整个数组一次并平方每个元素。那为什么 timeit 说 numpy 代码循环 100000 次。

你的直觉是对的。但是%timeit循环执行您的命令 N 次以获得良好的统计估计值。

您可以使用n选项指定循环数,如下所示:

%timeit -n1 arange(1, 100, .001)    # one loop
%timeit -n10 arange(1, 100, .001).  # ten loops

另请参阅%timeit的文档。

最新更新