2012-07-03 2 views
3

Я хочу извлечь значения массива «B» с одним и тем же индексом максимума каждой строки матрицы «A». найти индекс я использую Numpy функцию «numpy.argmax», как это:Использовать индекс максимального значения на определенной оси

>>> A=numpy.asarray([[0,1,6],[3,2,4]]);A 
array([[0, 1, 6], 
     [3, 2, 4]]) 
>>> argA=numpy.argmax(A,axis=1);argA 
array([2, 2]) 

Проблема заключается в том, что я не знаю, как использовать «Арга» для извлечения значений в массиве «В»

ответ

0

Вы можете использовать массив непосредственно в качестве индекса - это на самом деле так просто, как:

B[:, arga] 

например:

>>> A[:,argA] 
array([[6, 6], 
     [4, 4]]) 
+0

Я уже попробовать это, но он не работает: B = numpy.arange (6); B. shape = (2, -1); B массив ([[0, 1, 2], [3, 4, 5]]) >>> B [argA] Traceback (последний последний звонок): Файл " ", строка 1, в IndexError: index (2) вне диапазона (0 <= index <1) в размере 0 – loco

+0

@loco - вы забыли ','? (Я сделал). - например. 'B [:, argA]' вместо 'B [: argA]' – mgilson

+0

@loco обратите внимание, что вы должны получить его вдоль правой оси - 'B [argA]' пытается использовать значения 'argA' вдоль оси 0 , что дает эту ошибку. 'B [:, argA]' говорит ему вместо этого использовать ось 1. – lvc

0

Это может показаться немного неэффективным, но вы можете использовать:

A.take(argA, axis=1).diagonal() 

Вместо A.take вы можете использовать A[:, argA] но take более определенно относительно оси.

Вы можете использовать ravel_multi_index для преобразования плоских индексов:

A.take(np.ravel_multi_index((np.arange(len(argA)), argA), A.shape)) 
4

Каждая запись в argA соответствует положению индекса максимального значения в пределах соответствующей строки. Строки не явны (из-за использования axis=1), но соответствуют индексу для каждой записи. Поэтому вам нужно добавить их, чтобы получить элементы, которые вам нужны.

>>> A[[0,1], argA] 
array([6, 4]) 

Итак:

>>> B 
array([[ 9, 8, 2], 
     [ 3, 4, 5]]) 
>>> B[[0,1], argA] = 84,89 
>>> B 
array([[ 9, 8, 84], 
     [ 3, 4, 89]]) 

обобщать использование:

>>> B[np.arange(A.shape[0]),argA] 
Смежные вопросы