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

Я хотел бы смочь сделать

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

и доберитесь

1

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

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

?

Править: Спасибо за ответы. В моей программе я индексировал с массивом Numpy, а не кортежем и получал странные результаты. При преобразовании в кортеж, поскольку предлагает Alok, добивается цели.

18
задан ntimes 15 March 2010 в 13:54
поделиться

4 ответа

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

>>> import numpy
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[idx]
1
13
ответ дан 30 November 2019 в 07:49
поделиться

Try

A[tuple(idx)]

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

15
ответ дан 30 November 2019 в 07:49
поделиться

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

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)

2
ответ дан 30 November 2019 в 07:49
поделиться

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

2
ответ дан 30 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: