Python:快速计算几个(相同长度)列表的平均值?

Dav*_*Tan 9 python

有没有一种简单的方法来计算Python中几个(相同长度)列表的平均值?说,我有[[1, 2, 3], [5, 6, 7]],并希望获得[3,4,5].这要做10万次,所以希望它快.

ars*_*jii 23

如果你正在使用numpy(这似乎更合适):

>>> import numpy as np
>>> data = np.array([[1, 2, 3], [5, 6, 7]])
>>> np.average(data, axis=0)
array([ 3.,  4.,  5.])
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 5

In [6]: l = [[1, 2, 3], [5, 6, 7]]

In [7]: [(x+y)/2 for x,y in zip(*l)]
Out[7]: [3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

(您需要决定是否要使用整数或浮点数学,以及要使用哪种除法。)

在我的计算机上,上述费用为1.24us:

In [11]: %timeit [(x+y)/2 for x,y in zip(*l)]
1000000 loops, best of 3: 1.24 us per loop
Run Code Online (Sandbox Code Playgroud)

因此,处理100,000个输入将花费0.124s。

有趣的是,在这么小的输入下,NumPy数组会变慢:

In [27]: In [21]: a = np.array(l)

In [28]: %timeit (a[0] + a[1]) / 2
100000 loops, best of 3: 5.3 us per loop

In [29]: %timeit np.average(a, axis=0)
100000 loops, best of 3: 12.7 us per loop
Run Code Online (Sandbox Code Playgroud)

如果输入变大,则相对时间无疑会改变。