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

如何利用起始与结束坐标提取NumPy 3D数组的子数组?

提取3D NumPy数组中长方体区域的子数组方法

嘿,这个问题用NumPy的切片特性就能轻松搞定,不过得先搞清楚一个核心规则:NumPy的数组切片是左闭右开区间,也就是arr[start:end]会包含start索引的元素,但不会包含end索引的元素。这点直接决定了我们怎么写切片范围。

具体操作步骤

假设你的3D数组名叫arr,已经用numpy.random.rand(100, 100, 100)或者其他方式创建好了:

  1. 先明确需求:如果要包含起始坐标(0,0,0)和结束坐标(50,20,20)这两个顶点的所有元素,那每个维度的结束切片值需要加1。因为切片到51的时候,实际会取到索引0到50的元素,刚好包含目标结束点。
  2. 直接使用三维切片提取子数组:
import numpy as np

# 创建100×100×100的3D数组
arr = np.random.rand(100, 100, 100)

# 提取包含(0,0,0)到(50,20,20)的长方体区域
sub_arr = arr[0:51, 0:21, 0:21]

# 验证子数组形状,应该是(51, 21, 21)
print(sub_arr.shape)  # 输出 (51, 21, 21)

通用写法

如果你的起始坐标是(x1, y1, z1),结束坐标是(x2, y2, z2),并且需要包含这两个顶点,通用的提取代码就是:

sub_arr = arr[x1:x2+1, y1:y2+1, z1:z2+1]

要是你本来就不想包含结束坐标的元素,那直接去掉+1就行,比如arr[0:50, 0:20, 0:20],不过这种情况在“两个顶点定义长方体”的场景里比较少见~

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:19