最近的是這個summing columns。我如何總結最簡潔的Python中的多維數組?
所以我會做同樣的事情在我的問題:
說我下面一個Python 2D名單:
my_list = [ [1,2,3,4],
[2,4,5,6] ]
我可以用一個列表理解的行總計:
row_totals = [ sum(x) for x in my_list ]
在一行中,我如何求和整個2d數組?
27
最近的是這個summing columns。我如何總結最簡潔的Python中的多維數組?
所以我會做同樣的事情在我的問題:
說我下面一個Python 2D名單:
my_list = [ [1,2,3,4],
[2,4,5,6] ]
我可以用一個列表理解的行總計:
row_totals = [ sum(x) for x in my_list ]
在一行中,我如何求和整個2d數組?
27
你可以做那麼容易,因爲
sum(map(sum, my_list))
或可替代
sum(sum(x) for x in my_list))
收工吧,如果你不希望超過2個維度。請注意,由於使用了map()
,第一種解決方案很可能不是最快的(如執行時間)解決方案。基準並根據需要進行比較。
最後,如果您發現自己使用多維數組,請考慮使用NumPy及其優越的數組友好函數。這裏是你的問題的簡短摘錄:
import numpy as np
my_list = np.array([[1,2,3,4], [2,4,5,6]])
np.sum(my_list)
這將適用於您的數組可能有的任何數量的維度。
>>> sum ([ sum(x) for x in [[1,2,3,4], [2,4,5,6]] ])
27
使用發電機不是列表理解('()'不''[]')。 – katrielalex 2012-02-29 15:21:45
@katrielalex:你是對的,以及mindcorrosive。我採取OP代碼測試,然後忘了刪除正方形。 – CapelliC 2012-02-29 15:31:27
使用itertools
另一種解決方案:
>>> from itertools import chain
>>> my_list = [ [1,2,3,4], [2,4,5,6] ]
>>> sum(chain(*my_list))
27
>>> from itertools import chain
>>> my_list = [[1,2,3,4], [2,4,5,6]]
>>> sum(chain.from_iterable(my_list))
27
您可以使用和先添加內部列表一起再總結產生的扁平列表:
>>> my_list = [ [1,2,3,4], [2,4,5,6] ]
>>> sum(my_list, [])
[1, 2, 3, 4, 2, 4, 5, 6]
>>> sum(sum(my_list, []))
27
你的答案是否在此處添加了其他答案? – rayryeng 2015-12-26 03:00:07
「地圖」本身並不慢。 – Marcin 2012-02-29 11:27:43
@Marcin它在Python 2.x. – katrielalex 2012-02-29 11:48:20
@katrielalex:數字不贊同你:http://ideone.com/4RXfR vs http://ideone.com/6tOEJ – Marcin 2012-02-29 12:21:06