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 处的项目。
有人在 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 处的项目。