Numpy:无法获取 3D 数组的 2D 切片

Numpy: trouble obtaining a 2D slice of 3D array

有人在 SO 上提出了类似的问题,但从来没有以我需要的形式提出。

我似乎无法理解 NumPy 的切片行为。

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

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

我想对该数组进行“z 切片”,但最终得到的是 512x120 数组而不是 512x512 数组 例如,我尝试以下代码

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

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

您必须立即切片:

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

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

因为重复 [:] 没有任何作用:

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

这是因为 [:] 获取了整个列表...重复多次不会改变任何内容。

vol1[:][:][2] 的问题是: vol1[:] 将给出整个数组,然后再次 [:] 给出整个数组,最后 [2] 给出索引 2 处的数组到外轴,最终 vol1[:][:][2] 什么都没有但是 vol1[2] 这不是你想要的。

你需要取numpy数组切片:

vol1[:, :, 2].

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