Как бы я суммировал многомерный массив в самом лаконичном питоне? - PullRequest
9 голосов
/ 29 февраля 2012

Ближайшим был этот столбец суммирования .

Так что я сделаю нечто подобное в своем вопросе:

Скажем, у меня есть список Python 2D, как показано ниже:

my_list =  [ [1,2,3,4],
             [2,4,5,6] ]

Я могу получить итоговые значения строки с пониманием списка:

row_totals = [ sum(x) for x in my_list ]

В одной строке, как я могу сложить весь 2d-массив?

27

Ответы [ 5 ]

11 голосов
/ 29 февраля 2012

Вы можете сделать так же просто, как

sum(map(sum, my_list))

или, альтернативно,

sum(sum(x) for x in my_list))

и назвать это днем, если вы не ожидаете более двух измерений.Обратите внимание, что первое решение, скорее всего, не самое быстрое (как во время выполнения) решение из-за использования map().Проведите сравнительный анализ и при необходимости сравните.

Наконец, если вы обнаружите, что используете многомерные массивы, рассмотрите возможность использования NumPy и его превосходных дружественных к массиву функций.Вот краткий отрывок для вашей проблемы:

import numpy as np

my_list = np.array([[1,2,3,4], [2,4,5,6]])
np.sum(my_list)

Это подойдет для любого числа измерений, которые могут иметь ваши массивы.

3 голосов
/ 29 февраля 2012

Другое решение с использованием itertools:

>>> from itertools import chain
>>> my_list = [ [1,2,3,4], [2,4,5,6] ]
>>> sum(chain(*my_list))
27
3 голосов
/ 29 февраля 2012
>>> sum ( [ sum(x) for x in [[1,2,3,4], [2,4,5,6]] ] )
27
1 голос
/ 29 февраля 2012
>>> from itertools import chain
>>> my_list = [[1,2,3,4], [2,4,5,6]]
>>> sum(chain.from_iterable(my_list))
27
0 голосов
/ 26 декабря 2015

Вы можете использовать сумму, чтобы сначала сложить внутренние списки, а затем суммировать полученный список:

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...