У меня есть массив Python, например:
[[1,2,3],
[1,2,3]]
Я могу добавить строку, выполнив sum(array[i])
, как я могу суммировать столбец, используя цикл double для цикла?
т.е. для первого столбца я мог бы получить 2, затем 4, затем 6.
У меня есть массив Python, например:
[[1,2,3],
[1,2,3]]
Я могу добавить строку, выполнив sum(array[i])
, как я могу суммировать столбец, используя цикл double для цикла?
т.е. для первого столбца я мог бы получить 2, затем 4, затем 6.
Использование цикла for
(в выражении генератора):
data = [[1,2,3],
[1,2,3]]
column = 1
print(sum(row[column] for row in data)) # -> 4
Попробуйте следующее:
a = [[1,2,3],
[1,2,3]]
print [sum(x) for x in zip(*a)]
Вам не нужен цикл, используйте zip()
для переноса списка, затем возьмите нужный столбец:
sum(list(zip(*data)[i]))
(Примечание в 2.x, zip()
возвращает список, поэтому вам не нужен вызов list()
).
Изменить: простейшим решением этой проблемы без использования zip()
, вероятно, будет:
column_sum = 0
for row in data:
column_sum += row[i]
Мы просто прокручиваем строки, беря элемент и добавляем его к нашей общей сумме.
Это, однако, менее эффективно и довольно бессмысленно, поскольку у нас есть встроенные функции для этого. В общем случае используйте zip()
.
[sum(row[i] for row in array) for i in range(len(array[0]))]
Это должно сделать это. len(array[0])
- количество столбцов, поэтому i
выполняет итерации. Выражение генератора row[i] for row in array
проходит через все строки и выбирает один столбец для каждого номера столбца.
Я думаю, что самый простой способ:
sumcolumn=data.sum(axis=0)
print (sumcolumn)
вы можете использовать zip()
:
In [16]: lis=[[1,2,3],
....: [1,2,3]]
In [17]: map(sum,zip(*lis))
Out[17]: [2, 4, 6]
или с простыми для циклов:
In [25]: for i in xrange(len(lis[0])):
summ=0
for x in lis:
summ+=x[i]
print summ
....:
2
4
6
Вам может быть интересно numpy, у которого есть более сложные функции массива. Один из них состоит в том, чтобы легко суммировать столбец:
from numpy import array
a = array([[1,2,3],
[1,2,3]])
column_idx = 1
a[:, column_idx].sum() # ":" here refers to the whole array, no filtering.
Вы можете использовать numpy:
import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)