数据:一系列大小相等的列表,必须沿列进行平均才能返回一个平均列表
statistics.mean()使用或之一对 python 中的上述数据进行平均是否更快,sum()/len()或者将其转换为 numpy 数组然后使用是否更快np.average()?
或者没有显着差异?
这个问题提供了使用哪种方法的答案,但没有提及与替代方案的任何比较。
您可以衡量不同提案的绩效。我假设沿着列意味着这是行方向的。例如,如果您有 1000 个列表,每个列表有 100 个元素,那么最后您将得到一个包含 100 个平均值的列表。
import random
import numpy as np
import statistics
import timeit
data = [[random.random() for _ in range(100)] for _ in range(1000)]
def average(data):
return np.average(data, axis=0)
def sum_len(data):
return [sum(l) / len(l) for l in zip(*data)]
def mean(data):
return [statistics.mean(l) for l in zip(*data)]
if __name__ == "__main__":
print(timeit.timeit('average(data)', 'from __main__ import data,average', number=10))
print(timeit.timeit('sum_len(data)', 'from __main__ import data,sum_len', number=10))
print(timeit.timeit('mean(data)', 'from __main__ import data,mean', number=10))
Run Code Online (Sandbox Code Playgroud)
输出
0.025441123012569733
0.029354612997849472
1.0484535950090503
Run Code Online (Sandbox Code Playgroud)
看起来 比statistics.mean慢很多(大约慢 35 倍),并且np.average方法sum_len和 比np.average稍微快一些sum_len。