Numpy 4d阵列切片

时间:2016-10-18 17:29:50

标签: python numpy

为什么切片4d数组会给我一个3d数组?我期望在其中一个维度中使用范围为1的4d数组。

示例:

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来完成,但我想知道为什么第一种方法无法正常工作?

1 个答案:

答案 0 :(得分:3)

the docs

  

整数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是1维的,a[2]是0维的。

在较高维度,如果X是4维且形状(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)

相关问题