有没有一种简单的方法来计算Python中几个(相同长度)列表的平均值?说,我有[[1, 2, 3], [5, 6, 7]]
,并且想获得[3,4,5]
。这是要做100000次,所以想要它快。Python:快速计算几个(相同长度)列表的平均值的方法?
回答
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]
(你需要决定是否要整数或浮点数数学,以及使用哪种划分)
在我的电脑,上面需要1.24us:
In [11]: %timeit [(x+y)/2 for x,y in zip(*l)]
1000000 loops, best of 3: 1.24 us per loop
因此处理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
如果输入变得更大,所述相对时间无疑会变化。
这是假设他有两个100000项目的列表,可以这样解释这个问题,但不知何故,我怀疑这是他想要的。 –
@LennartRegebro:对我来说,*“这是做10万次“*意味着许多投入,而不是长时间投入,但是我们当然可以在OP上做出澄清。 – NPE
如果你使用numpy
(这似乎是更合适的位置):
>>> import numpy as np
>>> data = np.array([[1, 2, 3], [5, 6, 7]])
>>> np.average(data, axis=0)
array([ 3., 4., 5.])
扩展NPE上的答案,包含您要平均n
子列表列表,使用这个(一个numpy的解决方案可能更快,但我仅使用内置插件):
def average(l):
llen = len(l)
def divide(x): return x/llen
return map(divide, map(sum, zip(*l)))
这概括了所有的子表,然后由子列表的数量划分的结果,产生了平均水平。您可以内联len
计算,并将divide
转换为类似lambda x: x/len(l)
的lambda,但使用显式函数并预先计算长度应该快一些。
- 1. 编写一个方法来计算长度/平均值
- 2. 如何计算不同加速度的平均速度?
- 3. 计算相同指数的平均值在列表中,蟒蛇
- 4. 在Python中对不同长度的多个列表进行平均的最快方法
- 5. 如何计算列表中的平均时间长度
- 6. 计算多个不同的平均值
- 7. 计算数组列表的平均值?
- 8. 快速计算邻近矩阵中的平均邻近度
- 9. 如何计算Python列表中的多个平均值
- 10. Python的 - 两个列表长度相同
- 11. 尾均值的计算(平均)列
- 12. 计算多个列的平均值
- 13. 计算平均值的平均值
- 14. 快速计算大矩阵中的非对角线平均值
- 15. 计算两个表的平均值
- 16. 从计算列平均值
- 17. 使用Python中的递归计算列表的平均值
- 18. 快速的bignum平方计算
- 19. 计算分析目的的平均持续时间的快速方法
- 20. 创建一个循环,用于计算不同滚动平均长度的向量的滚动平均值
- 21. bash脚本来计算几个整数值的平均值
- 22. 计算python的平均值和比较
- 23. 最Python的方式来计算平均
- 24. 计算平均值Python中的列表,但不包括文字
- 25. 如何计算python中元组列表的平均值?
- 26. 使用嵌套列表计算python的平均值
- 27. 计算每个季度给定月份列的平均值
- 28. 计算python集合中的值的平均值。计算器
- 29. 最长公共子序列长度(LCS)的快速(er)算法
- 30. 计算Spark scala中几列的平均值
如何为第一个元素获得'4'? – NPE
NumPy数组可能比纯Python更快。否则,除了这样做外,确实没有“快速”的方法。而10万次并不是真的那么多。 –
@LennartRegebro:我刚刚做了一些基准测试,在这样一个小输入上'numpy.average()'比简单的列表理解速度慢了10倍。很令人惊讶。 – NPE