Индекс Numpy размеры массива с кортежем - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть массив numpy, такой как arr = np.arange(16).reshape(2,2,2,2)

Я хочу динамически получить доступ к arr[:, dim2, dim3], когда у меня есть (dim2, dim3) в качестве кортежа. Каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Попробуйте что-то вроде этого, если число измерений может не совпадать для вашего массива:

some_tuple = (dim2, dim3) # Could be (dim2, dim3, ..., dimN)

arr[(slice(None),) + some_tuple]

В этом конкретном случае (slice(None),) + some_tuple совпадает с (slice(None), dim2, dim3). slice(None) более или менее эквивалентно ":", но его можно использовать в большем количестве мест, чем ":". Обратите внимание, что я поместил slice(None) в одноэлементный кортеж (т.е. (slice(None),)), чтобы добавить его к some_tuple. Также обратите внимание, что после slice(None) стоит запятая, т.е. я не просто пишу (slice(None)) без запятой. Это не будет работать без лишней запятой.

0 голосов
/ 27 февраля 2020
some_tuple = (dim2, dim3)

arr[:, some_tuple[0], some_tuple[1]]

...