有沒有一種簡單的方法來計算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