2017-08-19 20 views
-2
%timeit [i **2 for i in range(1000)] 
print('*******') 
%timeit np.arange(1000) ** 2 

打印:numpy数组使用比它应该更多的循环。为什么?

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次。

+3

您还没有看过'timeit'模块的功能。阅读文档! “循环”并不是指你测试的代码做了什么,而是代码执行的频率。 –

+1

循环计数是定时器执行的次数。对于需要较少时间的代码,定时器运行的次数更多。你的第二个代码更快,因此定时器决定运行更多次。 – Divakar

回答

1

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

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

documentation of %timeit参见:

可以使用n选项类似指定的循环数。

+0

该文档说选项:-n :在循环中执行给定的语句次。如果没有给出这个值,则选择一个拟合值。关于如何选择合适的价值的任何想法? – claudius

+1

@claudius它的选择使得总时间> = 0.2秒。源代码 - https://github.com/python/cpython/blob/3.6/Lib/timeit.py#L210-216 – Divakar

+0

谢谢divakar! – claudius

相关问题