Я хотел бы смочь сделать
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
и доберитесь
1
однако это не допустимый синтаксис. Есть ли способ сделать это без явного выписывания
>>> A[idx[0], idx[1]]
?
Править: Спасибо за ответы. В моей программе я индексировал с массивом Numpy, а не кортежем и получал странные результаты. При преобразовании в кортеж, поскольку предлагает Alok, добивается цели.
Это проще, чем вы думаете:
>>> import numpy
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[idx]
1
Try
A[tuple(idx)]
Если у вас нет более сложного случая использования, не такого простого, как этот пример, вышеописанное должно работать для всех массивов.
Индексирование объекта вызывает:
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)
Распаковка не требуется — когда у вас есть запятая между [
и ]
, вы делаете кортеж, не передавая аргументы. foo[bar, baz]
эквивалентно foo[(bar, baz)]
. Поэтому, если у вас есть кортеж t = бар, баз
, вы просто скажете foo[t]
.