You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将元组用作任意维度数组切片的起始与结束值

用元组实现任意维度数组的切片操作

直接用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:50:20