如何将元组用作任意维度数组切片的起始与结束值
用元组实现任意维度数组的切片操作
直接用a[(1,3),(4,6)]无法得到预期的切片结果,因为numpy会把这种写法识别为高级索引(取指定离散索引的元素),而非连续区域的切片。要实现用两个元组分别指定各维度的起始/结束值来切片,可按以下方法操作:
核心思路
将两个元组的对应元素配对,为每个维度生成slice(start, end)对象,再把这些slice对象组成元组,传入数组的索引中。
代码示例
import numpy as np # 创建测试用的3维数组 a = np.arange(2*3*4).reshape(2,3,4) # 定义各维度的起始、结束元组 t_start = (0, 1, 2) t_end = (2, 3, 4) # 生成切片元组 slices = tuple(slice(s, e) for s, e in zip(t_start, t_end)) # 执行切片 result = a[slices]
上述代码等价于直接写a[0:2, 1:3, 2:4],完全匹配你想要的a[(0,1,2):(2,3,4)]的效果。
关键说明
- 要求
t_start和t_end的长度必须与数组的维度数一致,否则会抛出索引错误。 - 该方法适用于任意维度的数组,从二维到N维都通用。
- 如果需要指定步长,可扩展为
slice(s, e, step),只需再传入一个步长元组即可,比如t_step=(1,2,1),则slices = tuple(slice(s,e,st) for s,e,st in zip(t_start,t_end,t_step))。
内容的提问来源于stack exchange,提问作者Ford F150 Gaming
相关产品推荐
相关产品推荐

