Numpy 4D数组切片

3

为什么对4维数组进行切片会得到一个3维数组?我原本期望在其中一个维度上得到一个范围为1的4维数组。

例如:

print X.shape
(1783, 1, 96, 96)

切片数组:

print X[11,:,:,:].shape

或者

print X[11,:].shape

代码返回了(1, 96, 96),但我期望的是(1, 1, 96, 96)

我可以通过print X[11:12,:].shape来实现,但我想知道为什么第一种方法没有按照我的预期工作?


2
或者你可以说 X[ [11], : ].shape - jez
1个回答

7
根据文档
整数i返回与i:i+1相同的值,但返回对象的维度减少了1。特别地,选择元组的第

p

个元素为整数(其他所有条目为:)将返回具有尺寸N-1的相应子数组。如果N=1,则返回的对象是一个数组标量。
因此,在索引为整数时,将返回该索引处的值,并删除相应的轴。在一维中,行为与您所期望的相同:
In [6]: a = np.arange(5); a
Out[6]: array([0, 1, 2, 3, 4])

In [7]: a[2]
Out[7]: 2

In [8]: a[2].shape
Out[8]: ()

a是一维的,a[2]是零维的。

在更高的维度中,如果X是四维的,形状为(1783,1,96,96),那么X[11,:,:,:]返回所有第一个轴索引等于11的值,然后该轴被移除。 因此X[11,:,:,:].shape(1,96,96)

当切片指定一个范围时,比如a[2:3],则返回该范围内的所有值,而轴不会被移除:

In [9]: a[2:3]
Out[9]: array([2])

In [10]: a[2:3].shape
Out[10]: (1,)

同样地,X[11:12, :, :, :] 的形状为 (1,1,96,96)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接