Я могу индексировать двумерный массив с помощью кортежа или даже списка кортежей
a = numpy.array([[1,2],[3,4]])
i = [(0,1),(1,0)] # edit: bad example, should have taken [(0,1),(0,1)]
print a[i[0]], a[i]
(Дает 2 [2 3]
)
Однако я не могу манипулировать кортежами с помощью вектораарифметическое, то есть
k = i[0]+i[1]
не дает желаемого (1,1)
, но объединяет.
С другой стороны, используя для индексов числовые массивы, арифметика работает, но индексация не работает.
i = numpy.array(i)
k = i[0]+i[1] # ok
print a[k]
дает массив [[3 4], [3 4]]
вместо желаемого 4
.
Есть ли способ до делать векторную арифметику по индексам но также иметь возможность до индексировать массив numpy с ними (без извлечения класса из кортежа и перегрузки всех операторов)?
Этот вопрос сначала выглядел многообещающе, но я не мог понять, смогу ли я применить его к моей ситуации.
Редактировать (прокомментировать принятый ответ):
... и работа с массивами индексов также работает с использованием map
arr = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
ids = numpy.array([(0,1),(1,0)])
ids += (0,1) # shift all indices by 1 column
print arr[map(tuple,ids.T)]
(хотя меня смущает, зачем мне нужна транспонирование. Я бы тоже столкнулся с этой проблемой выше, ипросто повезло с [(0,1), (0,1)])