numpy-切片3d数组,如何在特定轴上应用两个不同长度的切片

时间:2019-03-15 17:42:59

标签: python arrays numpy

我一直困扰着切片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.

提前谢谢!

3 个答案:

答案 0 :(得分:1)

由于数组必须是“超矩形”,因此无法提供所需的确切输出,因此X[0].shape必须与X[1].shape相同。

您可以做的是:

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

答案 1 :(得分:1)

您可以这样做,例如:

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]]]

答案 2 :(得分:1)

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

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