我创建了一个numpy形状的数组(4,3,2);我希望下面的代码可以打印出一个形状为4 X 3或3 X 4的数组
import numpy as np
x = np.zeros((4,3,2), np.int32)
print(x[:][:][0])
然而,我得到了
[[0 0]
[0 0]
[0 0]]
看起来像2 X 3?我现在对numpy矩阵感到很困惑。我不应该
[[0 0 0]
[0 0 0]
[0 0 0]
[0 0 0]]
取而代之?如何将3D图像映射为numpy 3D矩阵?
例如,在MATLAB中,形状(m, n, k)
在(2D / 3D)图像的上下文中表示(row, col, slice)
。
非常感谢
答案 0 :(得分:1)
x[:]
会对第一维中的所有元素进行切片,因此x[:]
会得到与x
相同的结果,因此x[:][:][0]
等同于x[0]
。
要选择最后一个维度上的元素,您可以执行以下操作:
x[..., 0]
#array([[0, 0, 0],
# [0, 0, 0],
# [0, 0, 0],
# [0, 0, 0]], dtype=int32)
或:
x[:,:,0]
#array([[0, 0, 0],
# [0, 0, 0],
# [0, 0, 0],
# [0, 0, 0]], dtype=int32)
答案 1 :(得分:0)
您需要在元组中同时指定所有切片,如下所示:
x[:, :, 0]
如果你x[:][:][0]
,你实际上是将第一个维度编入索引三次。前两个为整个数组创建一个视图,第三个为第一个维度的索引0创建一个视图