【发布时间】:2017-09-03 16:48:13
【问题描述】:
我正在学习如何在 IPython 中使用 %timeit 魔法命令,实际上是在 Python 3 中使用 Jupyter notebook。如果我尝试为各种大小的数组计时 NumPy 排序函数:
n = 10
for i in range(n):
arr = np.random.rand(2**(i+10))
%timeit -n 2 np.sort(arr)
然后我得到一个大致增加的时间序列,就像我预期的那样。
但是,如果我尝试将此代码打包到一个函数中,我不会得到我期望的输出:所有时间都差不多!
def my_func(n):
for i in range(n):
arr = np.random.rand(2**(i+10))
%timeit -n 10 np.sort(arr)
my_func(10)
请查看显示结果的 Jupyter notebook here。
谁能解释我做错了什么,或者我误解了什么?
【问题讨论】:
-
%timeit是 Jupyter 支持的一种特殊语法,它实际上不是有效的 Python 代码。所以我希望 Jupyter 会单独解析它,它会对整个执行的命令产生影响。尝试直接使用timeit模块。 -
在第二种情况下,您只是在重复排序您在第一个单元格中创建的全局
arr,而不是本地 arr。将局部变量名称更改为其他名称,您将看到 %timeit 抱怨的内容。
标签: python function ipython timeit ipython-magic