如何在Python中对数组的列进行求和

19

如何将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循环中完成,不知道是否有更好的方法(例如列表推导式)?

13个回答

30
< p >< code >zip< /code >和< code >sum< /code >可以完成这个任务:< /p>< p >< strong >代码:< /p>
[sum(x) for x in zip(*input_val)]

zip 函数会将输入列表中的元素进行转置,因此包含列表的每个元素将在同一时间产生。这使得 sum 函数可以看到每个包含列表的第一个元素,下一次迭代将获取每个列表的第二个元素,以此类推...

测试代码:

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

结果:

[3, 6, 9, 12, 15]

12

如果您决定使用任何库,那么numpy很容易实现这一点:

np.sum(input_val,axis=0)


2
这种方法是对于一个大小为15561x22417的数组来说最快的。谢谢! - Ozkan Serttas
1
不客气。NumPy通常比列表推导快得多。 - JavNoor

5

您还可以在map函数内使用zipsum函数:

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

3
请使用NumPy库构建您的数组:
import numpy as np

使用array()函数创建数组并将其保存到变量中:
 arr = np.array(([1, 2, 3, 4, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]))

将sum()函数应用于数组,在轴参数上指定列,将其设置为零:

在轴参数设置为零的情况下,将sum()函数应用于数组的列:

arr.sum(axis = 0)

3

试试这个:

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

我想你可以使用:

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

2

这应该可以工作:

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

2

我认为这是最符合Python风格的做法。

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

1
Using Numpy,您可以轻松地在一行中解决此问题: 1:输入
input_val = [[1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5],
             [1, 2, 3, 4, 5]]

2:Numpy可以为您进行数学计算

np.sum(input_val,axis=0)

3:最后是结果

array([ 3,  6,  9, 12, 15])

1

使用列表推导式的一行代码:对于每一列(即一行的长度),生成该列所有条目的列表,并对该列表求和。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接