it-swarm.com.de

Wie summiert man Spalten eines Arrays in Python?

Wie addiere ich alle Werte einer Spalte in einem Python-Array? Im Idealfall möchte ich dies tun, ohne zusätzliche Bibliotheken zu importieren.

input_val = [[1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5]]

output_val = [3, 6, 9, 12, 15]

Ich weiß, ich kann dies in einer verschachtelten for-Schleife tun und frage mich, ob es einen besseren Weg gibt (wie ein Listenverständnis).

10
Alexander

Zip und sum können das erledigen:

Code:

[sum(x) for x in Zip(*input_val)]

Zip nimmt den Inhalt der Eingabeliste und transponiert sie so, dass jedes Element der enthaltenen Listen gleichzeitig erzeugt wird. Dadurch kann sum die ersten Elemente jeder enthaltenen Liste sehen. Bei der nächsten Iteration wird das zweite Element jeder Liste usw. abgerufen.

Testcode:

input_val = [[1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5]]

print([sum(x) for x in Zip(*input_val)])

Ergebnisse:

[3, 6, 9, 12, 15]
17
Stephen Rauch

Falls Sie sich für eine Bibliothek entscheiden, macht numpy dies einfach:

np.sum (input_val, Achse = 0)

5
JavNoor

Sie können auch sum mit Zip innerhalb der map Funktion verwenden:

# In Python 3.x 
>>> list(map(sum, Zip(*input_val)))
[3, 6, 9, 12, 15]
# explicitly type-cast it to list as map returns generator expression

# In Python 2.x, explicit type-casting to list is not needed as `map` returns list
>>> map(sum, Zip(*input_val))
[3, 6, 9, 12, 15]
4

Das sollte funktionieren:

[sum(i) for i in Zip(*input_val)]
2
Alex

Versuche dies:

input_val = [[1, 2, 3, 4, 5],
         [1, 2, 3, 4, 5],
         [1, 2, 3, 4, 5]]

output_val = [sum([i[b] for i in input_val]) for b in range(len(input_val[0]))]

print output_val
2
Ajax1234

Ich denke, das ist die pythonischste Art, dies zu tun

map(sum, [x for x in Zip(*input_val)])
2
Asav Patel

Einzeiler mit Listenzusammenfassungen: Erstellen Sie für jede Spalte (Länge einer Zeile) eine Liste aller Einträge in dieser Spalte und summieren Sie diese Liste.

output_val = [sum([input_val[i][j] for i in range(len(input_val))]) \
                 for j in range(len(input_val[0]))]
1
Prune

Versuchen Sie diesen Code. Dadurch wird output_val als [3, 6, 9, 12, 15] ausgegeben, wenn Ihr input_val lautet:

input_val = [[1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5]]

vals_length = len(input_val[0])
output_val = [0] * vals_length # init empty output array with 0's
for i in range(vals_length): # iterate for each index in the inputs
    for vals in input_val:
        output_val[i] += vals[i] # add to the same index

print(output_val) # [3, 6, 9, 12, 15]
1
LLL

Ich denke, du kannst verwenden:

import numpy as np
new_list = sum(map(np.array, input_val))
1
Pedro Lobito

Mit Numpy können Sie dieses Problem in einer Zeile lösen:

1: Eingabe

input_val = [[1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5]]

2: Numpy macht die Mathematik für dich

np.sum(input_val,axis=0)

3: Dann endlich die Ergebnisse

array([ 3,  6,  9, 12, 15])
0
Tom Souza
output_val=input_val.sum(axis=0)

das würde den Code noch einfacher machen, denke ich

0
Rop Shan