如何用最简洁的python对多维数组求和?

如何用最简洁的python对多维数组求和?,python,multidimensional-array,sum,Python,Multidimensional Array,Sum,最接近的是这个 所以我会在我的问题中做一些类似的事情: 假设我有一个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)) 如果你不

最接近的是这个

所以我会在我的问题中做一些类似的事情:

假设我有一个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()
,第一个解决方案很可能不是最快的(如执行时间)解决方案。根据需要进行基准测试和比较

最后,如果您发现自己使用多维数组,请考虑使用其优越的数组友好功能。以下是您的问题的简短摘录:

import numpy as np

my_list = np.array([[1,2,3,4], [2,4,5,6]])
np.sum(my_list)
这适用于阵列可能具有的任何数量的维度。

另一种解决方案使用:


您可以使用sum先将内部列表添加到一起,然后对生成的展开列表求和:

>>> 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

map
并不是天生的慢。@katrielex:数字与你不一致:vs@Marcin你没有抓住要点——如果你使用列表理解,那么
map
的优势就消失了。否则它会分配一个不必要的列表。@Katrielex不,我不认为我漏掉了重点。公平地比较,map速度更快。事实上,您可以再次检查这些链接-我已将它们更新为使用映射和生成器表达式的和。您的解决方案中有一个输入错误使用生成器而不是列表理解(
()
而不是
[]
)。@Katrielex:您是对的,也是对的。我用操作码进行测试,然后忘了删除方块。你的答案在其他答案的基础上添加了什么吗?*代表什么?它是“解包运算符”(
*
表示列表/元组,
**
表示字典):
>>> 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