Как суммировать столбцы массива в Python

Как добавить все значения столбца в массив python? В идеале я хочу сделать это без импорта каких-либо дополнительных библиотек.

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

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

Я знаю, что это можно сделать во вложенном цикле for, задаваясь вопросом, есть ли лучший способ (например, понимание списка)?

10 ответов


zip и sum можете сделать это:

код:

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

zip принимает содержимое входного списка и транспонирует их так, чтобы каждый элемент содержащихся списков создавался одновременно. Это позволяет sum чтобы увидеть первые элементы каждого содержащегося списка, затем следующая итерация получит второй элемент каждого списка и т. д...


вы также можете использовать sum С zip внутри map функция:

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

Это должно работать:

[sum(i) for i in zip(*input_val)]

попробуйте это:

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

Я думаю, что это самый питонический способ сделать это

map(sum, [x for x in zip(*input_val)])

в случае, если вы решите использовать любую библиотеку, numpy легко делает это:

np.sum (input_val,axis=0)


однострочное использование list: для каждого столбца (длина одной строки) составьте список всех записей в этом столбце и суммируйте этот список.

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

Я думаю, вы можете использовать:

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

попробуйте этот код. Это сделает output_val в конечном итоге, как [3, 6, 9, 12, 15] учитывая ваш 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]

output_val=input_val.sum(axis=0)

это сделало бы код еще проще, я думаю