在numpy中切片一个4d数组



我创建了一个名为'd'的numpy数组,然后将其重塑为'd1',如下所示:-

d=np.arange(32)
d1=d.reshape(2,2,2,4)

numpy数组'd1'看起来像:-

[[[[ 0  1  2  3]
[ 4  5  6  7]]
[[ 8  9 10 11]
[12 13 14 15]]]

[[[16 17 18 19]
[20 21 22 23]]
[[24 25 26 27]
[28 29 30 31]]]]

我想切片和提取这个数组,以便得到两个1-D数组如下:-

[[13 14]
[17 18]]

我是新手,刚开始2天。我能做一些基本的东西与索引和切片。然而,这个问题让我困惑了好几个小时。任何帮助都将非常感激。谢谢你的问候。

如果您的选择是任意的,并且您只是想要一种获得[[13, 14], [17, 18]]的方法。那么,这里有一个可能的解决方案:

  1. 首先将nd-array重塑为2D数组

    >>> d.reshape(8, 4)
    array([[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11],
    [12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23],
    [24, 25, 26, 27],
    [28, 29, 30, 31]])
    
  2. 沿着剩余的两个轴正确切片:

    >>> d.reshape(8, 4)[3:5, 1:3]
    array([[13, 14],
    [17, 18]])
    

或者,您可以将索引分解为d形状并使用这些索引来索引数组:

>>> idx = np.unravel_index([13, 14, 17, 18], d.shape)
(array([0, 0, 1, 1]),
array([1, 1, 0, 0]),
array([1, 1, 0, 0]),
array([1, 2, 1, 2]))
>>> d[idx]
array([13, 14, 17, 18])

最新更新