Numpy:获取3D阵列的2D切片时遇到问题

2024-06-24 12:39:51 发布

您现在位置:Python中文网/ 问答频道 /正文

类似的问题也曾被问过,但从来没有以我需要的形式出现过

我似乎很难理解NumPy切片行为

假设我有一个512x512x120形状的Numpy数组

vol1=some_numpy_array
print(x.shape) #result: (512,512,120)

我想对这个数组取一个“z-slice”,但是我最终得到的是一个512x120数组,而不是一个512x512数组 例如,我尝试以下代码

zSlice=(vol1[:][:][2]).squeeze()
print(zSlice.shape()) #result: (512,120)

为什么生成的数组形状是(512,120)而不是(512,512)?我如何解决这个问题


Tags: numpy切片slicesome数组resultarray形式
2条回答

您必须立即切片:

vol1[:, :, 2].squeeze()

>>> vol1[:, :, 2].squeeze().shape
(512, 512)

因为重复执行[:]不会产生任何效果:

>>> (vol1[:][:] == vol1).all()
True
>>> 

这是因为[:]得到了整个列表。。。多次这样做不会改变任何事情

vol1[:][:][2]的问题是: vol1[:]将给出整个数组,然后再次{}给出整个数组,最后{}给出外轴索引2到处的数组,最后{}只不过是{},这不是您想要的

您需要获取numpy数组切片:

vol1[:, :, 2].

现在,它将获取最外层和最外层轴上的所有项目,但对于最内层轴,仅获取索引2处的项目

相关问题 更多 >