多个列表中每个元素的平均值 - Python

10

如果我有两个列表

a = [2,5,1,9]
b = [4,9,5,10]

我该如何找到每个元素的平均值,使得结果列表为:

[3,7,3,9.5]

4
你尝试过什么吗? - ayhan
抱歉有点苛刻,但您的标题意味着跨多个列表的平均值,而您的问题实际上是关于两个列表的。没有一个答案提到的方法对于例如2,234,983个列表来说都不够高效。 - David Andrei Ned
1
公正的观点,你认为你能做得更好吗? - ryansin
6个回答

17
>>> a = [2,5,1,9]
>>> b = [4,9,5,10]
>>> [(g + h) / 2 for g, h in zip(a, b)]
[3.0, 7.0, 3.0, 9.5]

1
在Python 2中,除法是截断的(整数除法),解决这个问题的一种方法是通过浮点数进行除法运算(这里是:2.0)。 - Laurent LAPORTE

11

关于你问题的标题,你可以简单地通过以下方式实现:

import numpy as np

multiple_lists = [[2,5,1,9], [4,9,5,10]]
arrays = [np.array(x) for x in multiple_lists]
[np.mean(k) for k in zip(*arrays)]
上面的脚本可以处理多个列表,而不仅仅是两个。如果您想比较两种方法的性能,请尝试:
%%time
import random
import statistics

random.seed(33)
multiple_list = []
for seed in random.sample(range(100), 100):
    random.seed(seed)
    multiple_list.append(random.sample(range(100), 100))

result = [statistics.mean(k) for k in zip(*multiple_list)]

或者:

%%time
import random
import numpy as np

random.seed(33)
multiple_list = []
for seed in random.sample(range(100), 100):
    random.seed(seed)
    multiple_list.append(np.array(random.sample(range(100), 100)))

result = [np.mean(k) for k in zip(*multiple_list)]

根据我的经验,使用numpy的方法更快。


6
你想要的是两个数组(或数学中的向量)的平均值。

自Python 3.4以来,有一个statistics模块,提供了一个mean()函数:

statistics.mean(data)

返回数据的样本算术平均值,即实数序列或迭代器。

你可以像这样使用它:

import statistics

a = [2, 5, 1, 9]
b = [4, 9, 5, 10]

result = [statistics.mean(k) for k in zip(a, b)]
# -> [3.0, 7.0, 3.0, 9.5]
< p >< em > 注意 :此解决方案可用于两个以上的数组,因为 < code > zip() 可以有多个参数。

1

使用NumPy数组是使用列表和for循环的替代方法。

import numpy as np
# an array can perform element wise calculations unlike lists. 
a, b = np.array([2,5,1,9]), np.array([4,9,5,10]) 
mean = (a + b)/2; print(mean)
>>>[ 3.   7.   3.   9.5]

0

看起来你正在寻找逐元素的平均值。在 np.mean 中设置 axis=0 就是你需要的。


 >>> import numpy as np

 >>> a = [2,5,1,9]

 >>> b = [4,9,5,10]

创建一个包含所有列表的列表。
>>> a_b = [a,b]

>>> a_b

[[2, 5, 1, 9], [4, 9, 5, 10]]

使用 np.mean 并将轴设置为 0。
>>> np.mean(a_b, axis=0)

array([3. , 7. , 3. , 9.5])

0
将这两个列表使用vstack放入一个numpy数组中,然后取平均值(使用'tolist'从numpy数组中返回):
import numpy as np
a = [2,5,1,9]
b = [4,9,5,10]
np.mean(np.vstack([a,b]), axis=0).tolist()

[3.0,7.0,3.0,9.5]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接