web-dev-qa-db-fra.com

Comment additionner les colonnes d'un tableau en Python

Comment additionner toutes les valeurs d'une colonne dans un tableau python? Idéalement, je veux le faire sans importer de bibliothèques supplémentaires.

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

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

Je sais que cela peut être fait dans une boucle imbriquée, en me demandant s'il y avait une meilleure façon (comme une liste de compréhension)

10
Alexander

Zip et sum peuvent le faire:

Code:

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

Zip prend le contenu de la liste d'entrée et le transpose pour que chaque élément des listes contenues soit produit en même temps. Ceci permet à la sum de voir les premiers éléments de chaque liste contenue, puis la prochaine itération obtiendra le deuxième élément de chaque liste, etc ...

Code de test:

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

Résultats:

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

Si vous décidez d'utiliser une bibliothèque, numpy le fait facilement:

np.sum (input_val, axis = 0)

5
JavNoor

Vous pouvez également utiliser sum avec Zip dans la map fonction:

# 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
Moinuddin Quadri

Cela devrait fonctionner:

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

Essaye ça:

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

Je pense que c'est la façon la plus pythonique de le faire

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

Comprendre une liste à l'aide de listes: pour chaque colonne (longueur d'une ligne), dressez une liste de toutes les entrées de cette colonne et additionnez cette 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

Essayez ce code. Cela fera que output_val finira par [3, 6, 9, 12, 15] étant donné votre input_val:

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

Je suppose que vous pouvez utiliser:

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

En utilisant Numpy, vous pouvez facilement résoudre ce problème en une seule ligne:

1: Entrée

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

2: Numpy fait le calcul pour vous

np.sum(input_val,axis=0)

3: Enfin les résultats

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

cela rendrait le code encore plus simple, je suppose

0
Rop Shan