如何使用numpy中的高级索引从数组中复制/切片特定部分?

brjng4g3  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(168)

我想用numpy复制一个数组的一部分并将其保存到另一个数组中。问题是,每行条目的数量和位置都会改变。我有两个数组,其中包含我想获取的那部分行的开始索引和结束索引,但切片不会接受数组。
我试过:

import numpy as np

a = np.arange(25).reshape(5,5)

min_idx = np.array(
    [0, 1, 2, 1, 0]
)

max_idx = np.array(
    [4, 3, 3, 2, 2]
)

b = np.zeros_like(a)

b[:, min_idx:max_idx] = a[:,min_idx:max_idx]

并且对于B来说想要有:

target_b = np.array([
    [0, 1, 2, 3, 4],
    [0, 6, 7, 8, 0],
    [0, 0, 12, 13, 0],
    [0, 16, 17, 0, 0],
    [20, 21, 22, 0, 0]
    ]
)
jtw3ybtb

jtw3ybtb1#

使用广播和遮罩:

c = np.arange(a.shape[1])
m1 = min_idx[:, None] <= c
m2 = max_idx[:, None] >= c
m = m1&m2

b[m] = a[m]

b

array([[ 0,  1,  2,  3,  4],
       [ 0,  6,  7,  8,  0],
       [ 0,  0, 12, 13,  0],
       [ 0, 16, 17,  0,  0],
       [20, 21, 22,  0,  0]])

相关问题