Как легко нарезать / проиндексировать многомерные массивы в Numpy / Python? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть массивный размер (15 x 200 x 3), называемый рэп.Я хотел бы нарезать его на основе двумерного списка, такого как этот:

fragment = [0  93
            7  102
            6  43
           11  167]

Это в основном список первых двух индексов исходного трехмерного массива, который я хочу вернуть.

Выдает ошибку, когда я пытаюсь сделать это следующим образом:

rap_sliced = rap[fragment, :]

или

rap_sliced = rap[list(fragment), :]
rap_sliced = rap[fragment]

Что я делаю не так?

1 Ответ

0 голосов
/ 20 сентября 2019

Предполагая ввод:

>>> fragment
[[0, 93], [7, 102], [6, 43], [11, 167]]
>>> fragment=np.array(fragment)

это будет работать:

rap[fragment[:, 0], fragment[:, 1], :]

Итак

numpy_array[X, Y, Z]

, где X, Y, Z может быть одно значение, список (одинразмерный), или :

В качестве альтернативы для numpy вы можете сделать:

numpy_array[boolean_array]

, где numpy_array.shape=boolean_array.shape и boolean_array, по существу, предоставляют вам True/False, независимо от того, вернулись вы или нетзначение с заданными координатами от numpy_array

...