Как суммировать столбцы массива в 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]
попробуйте это:
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
в случае, если вы решите использовать любую библиотеку, 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]))]
попробуйте этот код. Это сделает 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]