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 个列表r1
和r2
,包含列索引,如下所示:
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和1
of中。2
5
V
可以像这样轻松完成:
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)
我担心的是,有没有一种方法可以在没有循环的情况下做到这一点?提前致谢 :)
只需添加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)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |