Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How would I sum a multi-dimensional array in the most succinct python?

The closest was this one summing columns.

So I'll do something similar in my question:

Say I've a Python 2D list as below:

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

I can get the row totals with a list comprehension:

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

In one line, how can I sum the entire 2d-array?

27
like image 261
Mark Mayo Avatar asked Feb 29 '12 10:02

Mark Mayo


2 Answers

You can do as easy as

sum(map(sum, my_list))

or alternatively

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

and call it a day, if you don't expect more than 2 dimensions. Note that the first solution is most likely not the fastest (as in execution time) solution, due to the usage of map(). Benchmark and compare as necessary.

Finally, if you find yourself using multidimensional arrays, consider using NumPy and its superior array-friendly functions. Here's a short excerpt for your problem:

import numpy as np

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

This would work for any number of dimensions your arrays might have.

like image 50
mindcorrosive Avatar answered Oct 17 '22 18:10

mindcorrosive


Another solution using itertools:

>>> from itertools import chain
>>> my_list = [ [1,2,3,4], [2,4,5,6] ]
>>> sum(chain(*my_list))
27
like image 4
Tim Pietzcker Avatar answered Oct 17 '22 16:10

Tim Pietzcker