python - 计算列表列表的平均值
问题描述
我的列表包含 70000 个 Vetor(大小为 50 int 的子列表)
我想重新计算这个列表的平均值
我尝试 np.mean( list ,axis=0) 但它太慢了。花了这么多时间没有任何结果。
还有其他方法来计算这个平均值吗?
我的清单示例:
lis =[[1, 19, 19, 4, 5, 19, 10, 5, 21, 14, 5, 19, 4, 21, 20, 18, 15, 9, 19, 9, 5, 13, 5, 13, 9, 12, 12, 5, 14, 1, 9, 18, 5, 19, 5, 3, 20, 9, 15, 14, 8, 1, 25, 8, 1, 19, 19, 1, 14, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 16, 18, 9, 14, 3, 5, 13, 12, 25, 8, 9, 3, 8, 1, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 9, 14, 3, 8, 9, 6, 1, 7, 1, 18, 15, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 12, 25, 3, 5, 5, 3, 15, 12, 12, 5, 7, 9, 1, 12, 1, 2, 15, 21, 5, 19, 19, 5, 4, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 2, 4, 18, 1, 8, 13, 1, 14, 5, 2, 14, 15, 21, 26, 9, 4, 1, 14, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 19, 1, 1, 4, 2, 14, 15, 21, 1, 2, 9, 23, 1, 11, 11, 1, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 2, 4, 5, 12, 10, 1, 12, 9, 12, 2, 5, 14, 8, 1, 9, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[5, 3, 15, 12, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 19, 1, 11, 9, 14, 1, 2, 9, 14, 20, 5, 12, 8, 15, 21, 3, 5, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 5, 12, 13, 1, 19, 19, 9, 18, 1, 1, 12, 11, 8, 1, 4, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 12, 1, 12, 12, 1, 25, 1, 3, 15, 21, 20, 13, 12, 25, 18, 1, 3, 8, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],...]
print np.mean(lis,axis=0)
解决方案
这可能会更快,使用itertools.izip但在您的情况下(如果您不将其转换为 numpy 数组)理解做得最好:
[(sum(x)*1.0)/len(x) for x in itertools.izip(*lis)]
这*1.0
是由于 python 2.x 的划分。
lis = [[random.randint(1,50) for j in range(50)] for i in range(1400)]
%timeit np.mean(lis, axis=0)
100 loops, best of 3: 3.67 ms per loop
%timeit [(sum(x)*1.0)/len(x) for x in itertools.izip(*lis)]
100 loops, best of 3: 1.07 ms per loop
%timeit [(sum(x)*1.0)/len(x) for x in lis] #NOTE: equivalent to np.mean(lis,axis=1)
100 loops, best of 3: 660 µs per loop
lisnp = np.array(lis)
%timeit np.mean(lisnp, axis=0)
100 loops, best of 3: 132 µs per loop
lisnp = np.array(lis, dtype=np.float64)
%timeit np.mean(lisnp, axis=0)
100 loops, best of 3: 67.3 µs per loop
推荐阅读
- jsf - 从 FacesContext 设置时,焦点在 Chrome 中不起作用
- python - 在 step 函数中获取 AWS 状态机执行 ARN
- r - 使用cowplot 拼凑图时颜色渐变不正确
- r - 分组并计算从 t-1 年到 t 年的文本数据的余弦相似度?
- bash - SHELL - IF 语句中的 AND 操作
- python - 气流网络服务器已启动,但 UI 未在浏览器中显示
- c# - TimeZoneInfo.ConvertTimeFromUtc 未在已部署的 Azure Webjob 上正确应用 DST
- node.js - 在heroku上运行应用程序时出现R10启动超时错误
- mysql - MySQL 查询 - 获取当前时间段内下过 FIRST 订单的用户数
- javascript - 为什么 Set 在 JavaScript 中被视为键控集合?