【发布时间】:2013-08-05 15:36:15
【问题描述】:
Numpy 应该很快。但是,在将 Numpy ufunc 与标准 Python 函数进行比较时,我发现后者要快得多。
例如,
aa = np.arange(1000000, dtype = float)
%timeit np.mean(aa) # 1000 loops, best of 3: 1.15 ms per loop
%timeit aa.mean # 10000000 loops, best of 3: 69.5 ns per loop
我使用其他 Numpy 函数(例如 max、power)得到了类似的结果。我的印象是 Numpy 有一个开销,这使得小型阵列的速度较慢,但大型阵列的速度更快。在上面的代码中 aa 并不小:它有 100 万个元素。我错过了什么吗?
当然,Numpy 很快,只是功能看起来很慢:
bb = range(1000000)
%timeit mean(bb) # 1 loops, best of 3: 551 ms per loop
%timeit mean(list(bb)) # 10 loops, best of 3: 136 ms per loop
【问题讨论】:
-
您使用的是哪个版本的 Python?在 Python 2 中,
range()返回一个列表。在 Python 3 中,range()返回一个迭代器。这将对您的绩效衡量产生巨大影响。 -
np.mean(aa)和aa.mean似乎是同一个函数。 -
仅供参考,
aa.mean不做任何事情。你没有调用函数,你只是命名它。这就是为什么它这么快。 IOW,你想要aa.mean()。 -
@DSM:是的。做了一段时间后,它们似乎很相似,
aa.mean()似乎有点快。
标签: python performance function numpy performance-testing