numpy-切片一个3D阵列,如何在特定轴上应用两个不同长度的切片



我一直陷入有关切片numpy数组的问题。

下面是我现在有一个数组:

a = np.array([[[ 1,  2],
               [ 3,  4],
               [ 5,  6]],
              [[ 7,  8],
               [ 9, 10],
               [11, 12]]]

如何使用切片来获取如下的数组?

np.array([[[ 1,  2]],
          [[ 9, 10],
           [11, 12]]]

我尝试过a[[0,1],[0,[1,2]],但是它没有用并给出错误: ValueError: setting an array element with a sequence.

预先感谢您!

由于不可能输出所需的确切功能,因为数组必须是"超矩形",因此X[0].shape必须与X[1].shape相同。

您能做的是:

a[[0,1,1],[0,1,2]]
# array([[ 1,  2],
#        [ 9, 10],
#        [11, 12]])

您可以做到这一点,例如:

import numpy as np
a = np.array([[[ 1,  2], [ 3,  4], [ 5,  6]], [[ 7,  8], [ 9, 10], [11, 12]]])

print(np.array([[a[0, 0 ,: ],  a[1, 1 ,:], a[1, 2 ,: ]]]))

结果:

[[[ 1  2]
 [ 9 10]
 [11 12]]]

您可以分开应用两个操作,然后将它们合并:

np.array((a[0,0:1].tolist(), a[1,1:].tolist()))
# array([[[1, 2]], [[9, 10], [11, 12]]], dtype=object)

最新更新