繁体   English   中英

Numpy 4D数组切片

[英]Numpy 4d array slicing

为什么切片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来做到这一点,但我想知道为什么第一种方法无法按我预期的那样工作?

根据文档

整数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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM