如果我有两个清单
a = [2,5,1,9]
b = [4,9,5,10]
Run Code Online (Sandbox Code Playgroud)
如何找到每个元素的平均值,以便结果列表为:
[3,7,3,9.5]
Run Code Online (Sandbox Code Playgroud)
参考您的问题标题,您可以简单地通过以下方式实现:
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)]
Run Code Online (Sandbox Code Playgroud)
上面的脚本将处理多个列表,而不仅仅是两个。如果您想比较两种方法的性能,请尝试:
%%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)]
Run Code Online (Sandbox Code Playgroud)
或者:
%%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)]
Run Code Online (Sandbox Code Playgroud)
根据我的经验,numpy 方法要快得多。
>>> 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]
Run Code Online (Sandbox Code Playgroud)
您想要的是两个数组(或数学中的向量)的平均值。
从 Python 3.4 开始,有一个统计模块提供了一个mean()功能:
统计平均(数据)
返回数据的样本算术平均值、实数值的序列或迭代器。
你可以这样使用它:
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]
Run Code Online (Sandbox Code Playgroud)
注意:这个解决方案可以用于两个以上的数组,因为zip()可以有多个参数。