提问人:Wolfsgrey 提问时间:3/30/2023 更新时间:3/30/2023 访问量:48
如何在 numpy 中使用高级索引从数组中复制/切片特定部分?
How can I copy/slice a particular part out of an array with advanced indexing in numpy?
问:
我想复制一个数组的一部分,并使用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]
]
)
答:
1赞
mozway
3/30/2023
#1
使用广播和面罩:
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]])
评论
1赞
Chrysophylaxs
3/30/2023
最后一步也是可能的b = np.where(m1 & m2, a, 0)
1赞
mozway
3/30/2023
@Chrysophylaxs确实如此,我重用了 OP 的代码,但这是更干净;)
评论