【发布时间】:2016-08-15 04:25:05
【问题描述】:
我希望 array.array 比列表更快,因为数组似乎没有装箱。
但是,我得到以下结果:
In [1]: import array
In [2]: L = list(range(100000000))
In [3]: A = array.array('l', range(100000000))
In [4]: %timeit sum(L)
1 loop, best of 3: 667 ms per loop
In [5]: %timeit sum(A)
1 loop, best of 3: 1.41 s per loop
In [6]: %timeit sum(L)
1 loop, best of 3: 627 ms per loop
In [7]: %timeit sum(A)
1 loop, best of 3: 1.39 s per loop
造成这种差异的原因是什么?
【问题讨论】:
-
numpy 工具可以有效地利用您的数组:%timeit np.sum(A):100 个循环,最好的 3 个:每个循环 8.87 毫秒
-
我从来没有遇到过需要使用
array包的情况。如果你想做大量的数学运算,Numpy 以光速(即 C)运行,并且通常比诸如sum()之类的幼稚实现更好。 -
密切的选民:为什么这个是基于意见的? OP 似乎在就可测量和可重复的现象提出具体的技术问题。
-
@NickT 阅读An optimization anecdote。事实证明,
array在将整数字符串(表示 ASCII 字节)转换为str对象方面非常快。 Guido 本人是在经过许多其他解决方案后才提出的,并且对性能感到非常惊讶。无论如何,这是我记得看到它有用的唯一地方。numpy更适合处理数组,但它是第 3 方依赖项。
标签: python arrays performance boxing python-internals