Распаковка кортежей / массивов / списков в качестве индексов для Numpy Arrays

Я хотел бы быть в состоянии сделать

>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]

и получить

1

однако это неверный синтаксис. Есть ли способ сделать это без явного выписывания

>>> A[idx[0], idx[1]]

?

РЕДАКТИРОВАТЬ: Спасибо за ответы. В моей программе я индексировал массив Numpy, а не кортеж, и получал странные результаты. Преобразование в кортеж, как предполагает Алок, делает свое дело.

4 ответа

Решение

Это проще, чем вы думаете

>>> import numpy
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[idx]
1

Пытаться

A[tuple(idx)]

Если у вас нет более сложного варианта использования, который не так прост, как этот пример, вышеприведенное должно работать для всех массивов.

Распаковка не требуется- когда между запятой [ а также ]Вы делаете кортеж, не передавая аргументы. foo[bar, baz] эквивалентно foo[(bar, baz)], Так что, если у вас есть кортеж t = bar, baz вы бы просто сказали foo[t],

Индексирование объекта вызывает:

object.__getitem__(index)

Когда вы делаете A[1, 2], это эквивалентно:

A.__getitem__((1, 2))

Итак, когда вы делаете:

b = (1, 2)

A[1, 2] == A[b]
A[1, 2] == A[(1, 2)]

Оба утверждения оцениваются как True.

Если вам случится проиндексировать список, он может не индексироваться так же, как [1, 2]!= (1, 2)

Другие вопросы по тегам