numpy - нарезать трехмерный массив, как применить два среза разной длины на определенной оси - PullRequest
0 голосов
/ 15 марта 2019

Я на некоторое время застрял с вопросом о нарезке массива 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 ]

1 голос
/ 15 марта 2019

Вы можете сделать это, например:

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]]]
1 голос
/ 15 марта 2019

Вы можете применить две операции раздельно и объединить их потом:

np.array((a[0,0:1].tolist(), a[1,1:].tolist()))
# array([[[1, 2]], [[9, 10], [11, 12]]], dtype=object)
1 голос
/ 15 марта 2019

Точная вещь, которую вы даете в качестве желаемого результата, невозможна, так как массивы должны быть "гипер-прямоугольниками", поэтому X[0].shape должно быть таким же, как X[1].shape.

Что вы можетесделать это:

a[[0,1,1],[0,1,2]]
# array([[ 1,  2],
#        [ 9, 10],
#        [11, 12]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...