对 numpy 二维数组中的列求和

Edu*_*eMe 5 python numpy numpy-slicing numpy-ndarray

我有一个 2D NumPy 数组V

import numpy as np
np.random.seed(10)

V = np.random.randint(-10, 10, size=(6,8))
Run Code Online (Sandbox Code Playgroud)

这给出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]]
Run Code Online (Sandbox Code Playgroud)

现在,我有 2 个列表r1r2,包含列索引,如下所示:

r1 = [1, 2, 5]
r2 = [3, 4, 7]
Run Code Online (Sandbox Code Playgroud)

我想要的是添加V基于索引对的列(r1, r2)并将其存储在列索引中r1。也就是说,对于这种情况,添加 columns(1, 3)(2, 4)(5, 7)并将它们分别存储在 columns和1of中。25V

可以像这样轻松完成:

V[:, 1] = V[:, [1,3]].sum(axis=1)
V[:, 2] = V[:, [2,4]].sum(axis=1)
V[:, 5] = V[:, [5,7]].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)

给出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]]
Run Code Online (Sandbox Code Playgroud)

我担心的是,有没有一种方法可以在没有循环的情况下做到这一点?提前致谢 :)

Dan*_*ejo 3

只需添加V[:, r2]at V[:, r2],如下所示:

V[:, r1] += V[:, r2]
print(V)
Run Code Online (Sandbox Code Playgroud)

输出

[[ -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]]
Run Code Online (Sandbox Code Playgroud)