NumPy 3D数组提取z轴切片得到非预期形状该如何解决
问题原因
- 你使用的连续方括号
[:][:][2]属于顺序链式索引,并非NumPy规定的多维度同步索引,实际执行逻辑如下:- 第一步
vol1[:]返回完整原数组,形状仍为(512,512,120) - 第二步
[:]再次返回完整原数组,形状无变化 - 第三步
[2]对当前数组的第一个维度取索引为2的元素,最终得到的数组形状为(512,120),和你实际得到的结果一致。
- 第一步
修复方案
NumPy中针对多维度数组的切片/索引,需要用逗号分隔不同维度的索引规则,直接按如下写法即可:
zSlice = vol1[:, :, 2]
上述写法会直接对数组的第三个维度取索引为2的切片,得到的结果形状就是你预期的(512,512),无需额外调用squeeze()方法,因为该切片本身不存在长度为1的维度。
补充提示:你代码中的
zSlice.shape()写法存在错误,shape是NumPy数组的属性而非可调用方法,直接写print(zSlice.shape)即可正确输出形状。
内容的提问来源于stack exchange,提问作者Michael Sohnen
相关产品推荐
相关产品推荐

