NumPy中如何对ndarray选取多段不连续的维度范围切片
NumPy张量多段不连续维度切片选取方案
原生切片语法不支持在同一维度直接传入多段不连续范围,你可以先将目标维度的所有待选索引拼接为一维数组,再用该数组做高级索引即可实现需求。
实现代码
推荐使用np.r_快速拼接多段切片为索引数组,写法简洁:
import numpy as np # 拼接第三维度的所有目标索引段 selected_indices = np.r_[38:44, 46:48, 50:54] # 执行索引取值 output = x[i, :, selected_indices]
上述代码中selected_indices实际展开后的索引序列为[38, 39, 40, 41, 42, 43, 46, 47, 50, 51, 52, 53],和你需要选取的范围完全匹配。
补充说明
- 如果你不想使用
np.r_,也可以用np.concatenate配合np.arange实现等价的索引构造:selected_indices = np.concatenate([ np.arange(38, 44), np.arange(46, 48), np.arange(50, 54) ]) - 注意该方式返回的是原张量的副本,和单切片返回视图的特性不同,修改返回的
output不会改变原张量x的数值。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

