在numpy的2D数组中求列之和

5
我有一个二维NumPy数组V:
import numpy as np
np.random.seed(10)

V = np.random.randint(-10, 10, size=(6,8))

这将给出V
[[ -1  -6   5 -10   7   6   7  -2]
 [ -1 -10   0  -2  -6   9   6  -6]
 [  5   1   1  -9  -2  -6   4   7]
 [  9   3  -5   3   9   3   2  -9]
 [ -6   8   3   1   0  -1   5   8]
 [  6  -3   1   7   4  -3   1  -9]]

现在,我有两个列表r1r2,包含如下的列索引:

r1 = [1, 2, 5]
r2 = [3, 4, 7]

我想要的是根据索引对(r1, r2)添加V的列,并将其存储在列索引r1中。也就是说,对于这种情况,添加列(1,3),(2,4)和(5,7),并将它们分别存储在V的列1、2和5中。
可以轻松地像这样完成:
V[:, 1] = V[:, [1,3]].sum(axis=1)
V[:, 2] = V[:, [2,4]].sum(axis=1)
V[:, 5] = V[:, [5,7]].sum(axis=1)

这将给出V

[[ -1 -16  12 -10   7   4   7  -2]
 [ -1 -12  -6  -2  -6   3   6  -6]
 [  5  -8  -1  -9  -2   1   4   7]
 [  9   6   4   3   9  -6   2  -9]
 [ -6   9   3   1   0   7   5   8]
 [  6   4   5   7   4 -12   1  -9]]

我的关注点是,有没有一种方法可以不使用循环来实现呢?提前感谢:)

1个回答

3
只需在V[:, r2]处添加V[:, r2],如下所示:
V[:, r1] += V[:, r2]
print(V)

输出

[[ -1 -16  12 -10   7   4   7  -2]
 [ -1 -12  -6  -2  -6   3   6  -6]
 [  5  -8  -1  -9  -2   1   4   7]
 [  9   6   4   3   9  -6   2  -9]
 [ -6   9   3   1   0   7   5   8]
 [  6   4   5   7   4 -12   1  -9]]

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