从3D数据立方体提取指定位置1D速度图的索引问题求助
解决3D数组提取指定轴一维数据的问题
我来帮你搞定这个问题——你遇到的是Python多维数组索引的常见陷阱,链式索引和逗号分隔索引的行为完全不一样!
1. 先确认数组的轴顺序和形状
在调整索引之前,先明确你的lmcdata数组的轴顺序和各轴长度,执行以下代码:
print(lmcdata.shape)
比如如果输出是(120, 200, 655),就对应你说的:vchan(120个速度通道)是第一个轴,achan是第二个轴,dchan是第三个轴(长度655)。
2. 使用正确的多维索引语法
要提取指定achan和dchan下的所有vchan数据,你需要用逗号分隔的索引语法,而不是链式的[]调用:
achan = 50 dchan = 200 # 正确提取:取vchan轴的全部元素,同时指定achan和dchan的位置 vchan_data = lmcdata[:, achan, dchan] print(vchan_data.shape) # 此时应该输出(120,),完全符合你的预期
如果你的数组轴顺序是(achan, dchan, vchan)(比如输出形状是(200, 655, 120)),那调整索引为:
vchan_data = lmcdata[achan, dchan, :]
3. 为什么你的原代码会出错?
你写的lmcdata[:][achan][dchan]是链式索引,它的执行逻辑和你想的完全不一致:
lmcdata[:]返回整个3D数组(和原数组形状一致)[achan]对这个3D数组的第二个轴(索引1)取第achan个元素,得到一个形状为(120, 655)的2D数组(vchan × dchan)[dchan]对这个2D数组的第一个轴(索引0)取第dchan个元素,也就是取这个2D数组的第dchan行,长度正好是655(对应dchan轴的元素数)——这就是你得到错误结果的核心原因。
简单来说,链式索引是对前一步的结果逐次索引,而逗号分隔的索引是对原数组的多个轴同时索引,这才是多维数组提取目标数据的正确姿势。
内容的提问来源于stack exchange,提问作者camsoup14
相关产品推荐
相关产品推荐

