Как индексировать многомерный массив другим массивом?

avatar
Alexander Soare
8 августа 2021 в 19:03
44
0
0

Рассмотрим многомерный массив

arr = np.zeros((3,2,4))

и некоторый индексный массив

index_arr = np.array([2, 1])

Чтобы уточнить, что я хочу получить, вот это (но я хочу предоставлять индексы динамически):

arr[2, 1]  # array([0.  0.  0.  0.])

НЕ это:

arr[[2, 1]]  # which returns result with shape (2, 2, 4)

Я хотел бы сделать что-то подобное

arr[*index_arr]  # using * to unpack the items of `index_arr`

но это дает синтаксическую ошибку. Есть ли собственный способ сделать то, о чем я прошу?

Источник
sai
8 августа 2021 в 19:16
0

Вы можете сделать что-то вроде этого arr[np.hsplit(index_arr,2)] (предупреждает меня о будущем, но преобразование массива в кортеж должно быть простым)

hpaulj
8 августа 2021 в 19:18
4

arr[2,1] эквивалентно arr[(2,1)]. Другими словами, чтобы применить числа к разным измерениям, они должны быть в кортеже, а не в списке или массиве. Я знаю, что страница документации по индексации массивов длинная, но вам действительно нужно время, чтобы прочитать ее всю.

Alexander Soare
8 августа 2021 в 19:20
0

@hpaulj вау... спасибо

Ответы (0)