Как использовать комбинацию целочисленных индексов и массива в качестве индексов для многомерного массива? - PullRequest
2 голосов
/ 07 февраля 2020
x = np.array([[0, 1, 2, 3],
            [4, 5, 6, 7],
            [8, 9, 10, 11]])
x = np.array([np.array(x), np.array(x), np.array(x)])
arr = [[1, 1], [2, 2]]
print(x[:, arr])

Мне нужны (:, 1, 1) и (:, 2, 2) этого массива

То есть:

[5, 5, 5]
[10, 10, 10]

Но он возвращается (: , 1) и (:, 2) дважды я тоже пытался использовать кортеж.

Редактировать: с помощью x [(slice (None), * zip (* arr))] работал. Но что, если мне нужно использовать «:» между двумя значениями обр? Например, x [arr [0],:, arr [1])

1 Ответ

1 голос
/ 08 февраля 2020

Что вы можете сделать, это получить эти элементы с помощью

x[:<b>,[1,2],[1,2]</b>]

Возможно, вы не можете написать это напрямую, поскольку arr может иметь произвольное количество элементов. В этом случае мы можем распаковать результат в кортеж:

x[(slice(None), <b>*zip(*arr)</b>)]

Здесь zip(*arr) будет транспонировать элементы в arr, а затем мы распакуем транспонирование как дополнительное элементы в кортеже. slice(None) - это в основном то, что происходит за кулисами, если вы пишете : в нижнем индексе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...