2d array addition in python

I want to sum a 2 dimensional array in python:

Here is what I have:

def sum1[input]:
    sum = 0
    for row in range [len[input]-1]:
        for col in range[len[input[0]]-1]:
            sum = sum + input[row][col]

    return sum


print sum1[[[1, 2],[3, 4],[5, 6]]]

It displays 4 instead of 21 [1+2+3+4+5+6 = 21]. Where is my mistake?

asked May 23, 2012 at 3:43

1

I think this is better:

 >>> x=[[1, 2],[3, 4],[5, 6]]                                                   
>>> sum[sum[x,[]]]                                                             
21

answered Nov 27, 2012 at 6:07

3

You could rewrite that function as,

def sum1[input]:
    return sum[map[sum, input]]

Basically, map[sum, input] will return a list with the sums across all your rows, then, the outer most sum will add up that list.

Example:

>>> a=[[1,2],[3,4]]
>>> sum[map[sum, a]]
10

answered May 23, 2012 at 3:58

machowmachow

1,0121 gold badge9 silver badges16 bronze badges

1

This is yet another alternate Solution

In [1]: a=[[1, 2],[3, 4],[5, 6]]
In [2]: sum[[sum[i] for i in a]]
Out[2]: 21

answered May 14, 2015 at 16:44

AjayAjay

4,9892 gold badges21 silver badges29 bronze badges

0

And numpy solution is just:

import numpy as np
x = np.array[[[1, 2],[3, 4],[5, 6]]]

Result:

>>> b=np.sum[x]
   print[b]
21

answered May 23, 2012 at 3:50

AkavallAkavall

78k47 gold badges197 silver badges244 bronze badges

3

Better still, forget the index counters and just iterate over the items themselves:

def sum1[input]:
    my_sum = 0
    for row in input:
        my_sum += sum[row]
    return my_sum

print sum1[[[1, 2],[3, 4],[5, 6]]]

One of the nice [and idiomatic] features of Python is letting it do the counting for you. sum[] is a built-in and you should not use names of built-ins for your own identifiers.

answered May 23, 2012 at 3:59

mswmsw

41.9k9 gold badges83 silver badges108 bronze badges

This is the issue

for row in range [len[input]-1]:
    for col in range[len[input[0]]-1]:

try

for row in range [len[input]]:
    for col in range[len[input[0]]]:

Python's range[x] goes from 0..x-1 already

range[...] range[[start,] stop[, step]] -> list of integers

Return a list containing an arithmetic progression of integers.
range[i, j] returns [i, i+1, i+2, ..., j-1]; start [!] defaults to 0.
When step is given, it specifies the increment [or decrement].
For example, range[4] returns [0, 1, 2, 3].  The end point is omitted!
These are exactly the valid indices for a list of 4 elements.

answered May 23, 2012 at 3:45

dfbdfb

13k1 gold badge29 silver badges52 bronze badges

range[] in python excludes the last element. In other words, range[1, 5] is [1, 5] or [1, 4]. So you should just use len[input] to iterate over the rows/columns.

def sum1[input]:
    sum = 0
    for row in range [len[input]]:
        for col in range[len[input[0]]]:
            sum = sum + input[row][col]

    return sum

answered May 23, 2012 at 3:45

spinlokspinlok

3,46316 silver badges25 bronze badges

Don't put -1 in range[len[input]-1] instead use:

range[len[input]]

range automatically returns a list one less than the argument value so no need of explicitly giving -1

answered May 23, 2012 at 3:46

Kartik AnandKartik Anand

4,3575 gold badges40 silver badges72 bronze badges

def sum1[input]:
    return sum[[sum[x] for x in input]]

answered Sep 13, 2018 at 22:49

J F FitchJ F Fitch

1161 silver badge3 bronze badges

Quick answer, use...

total = sum[map[sum,[array]]]

where [array] is your array title.

answered Apr 1, 2018 at 20:54

1

In Python 3.7

import numpy as np
x = np.array[[ [1,2], [3,4] ]]
sum[sum[x]]

outputs

10

answered Jan 21, 2019 at 14:51

It seems like a general consensus is that numpy is a complicated solution. In comparison to simpler algorithms. But for the sake of the answer being present:

import numpy as np


def addarrays[arr]:

    b = np.sum[arr]
    return sum[b]


array_1 = [
  [1, 2],
  [3, 4],
  [5, 6]
]
print[addarrays[array_1]]

This appears to be the preferred solution:

x=[[1, 2],[3, 4],[5, 6]]                                                   
sum[sum[x,[]]]                                                             

answered Sep 26, 2019 at 0:14

peyopeyo

3393 silver badges14 bronze badges

def sum1[input]:
    sum = 0
    for row in input:
        for col in row:
            sum += col
    return sum
print[sum1[[[1, 2],[3, 4],[5, 6]]]]

Sefan

7061 gold badge7 silver badges22 bronze badges

answered Aug 17, 2021 at 7:57

Speed comparison

import random
import timeit
import numpy
x = [[random.random[] for i in range[100]] for j in range[100]]
xnp = np.array[x]

Methods

print["Sum python array:"]
%timeit sum[map[sum,x]]
%timeit sum[[sum[i] for i in x]]
%timeit sum[sum[x,[]]]
%timeit sum[[x[i][j] for i in range[100] for j in range[100]]]

print["Convert to numpy, then sum:"]
%timeit np.sum[np.array[x]]
%timeit sum[sum[np.array[x]]]

print["Sum numpy array:"]
%timeit np.sum[xnp]
%timeit sum[sum[xnp]]

Results

Sum python array:
130 µs ± 3.24 µs per loop [mean ± std. dev. of 7 runs, 10000 loops each]
149 µs ± 4.16 µs per loop [mean ± std. dev. of 7 runs, 10000 loops each]
3.05 ms ± 44.8 µs per loop [mean ± std. dev. of 7 runs, 100 loops each]
2.58 ms ± 107 µs per loop [mean ± std. dev. of 7 runs, 100 loops each]
Convert to numpy, then sum:
1.36 ms ± 90.1 µs per loop [mean ± std. dev. of 7 runs, 1000 loops each]
1.63 ms ± 26.1 µs per loop [mean ± std. dev. of 7 runs, 1000 loops each]
Sum numpy array:
24.6 µs ± 1.95 µs per loop [mean ± std. dev. of 7 runs, 10000 loops each]
301 µs ± 4.78 µs per loop [mean ± std. dev. of 7 runs, 1000 loops each]

answered Apr 5 at 10:13

FasmoFasmo

215 bronze badges

1

def sum1[input]:
    sum = 0
    for row in range [len[input]-1]:
        for col in range[len[input[0]]-1]:
            sum = sum + input[row][col]

    return sum


print [sum1[[[1, 2],[3, 4],[5, 6]]]]

You had a problem with parenthesis at the print command.... This solution will be good now The correct solution in Visual Studio Code

McLovin

5796 silver badges19 bronze badges

answered Aug 8 at 17:12

1

Not the answer you're looking for? Browse other questions tagged python or ask your own question.

How do you sum a row in a 2D array Python?

To get the sum of each row in a 2D numpy array, pass axis=1 to the sum[] function. This argument tells the function of the axis along which the elements are to be summed.

How do you add values to a 2D array?

For inserting data In 2d arrays, we need two for loops because we are working with rows and columns here..
Ask for an element position to insert the element in an array..
Ask for value to insert..
Insert the value..
Increase the array counter..

How do I append to a NumPy 2D array?

To add multiple rows to an 2D Numpy array, combine the rows in a same shape numpy array and then append it,.
# Append multiple rows i.e 2 rows to the 2D Numpy array..
empty_array = np. append[empty_array, np. array[[[16, 26, 36, 46], [17, 27, 37, 47]]], axis=0].
print['2D Numpy array:'].
print[empty_array].

How do you sum a column in a 2D array Python?

Python3. Method 2: Using the sum[] function in NumPy, numpy. sum[arr, axis, dtype, out] function returns the sum of array elements over the specified axis. To compute the sum of all columns the axis argument should be 0 in sum[] function.

Chủ Đề