Получите максимумы по столбцам из массива NumPy - PullRequest
0 голосов
/ 14 октября 2018

У меня есть двумерный массив, скажем,

x = np.random.rand(10, 3)

array([[ 0.51158246,  0.51214272,  0.1107923 ],
   [ 0.5210391 ,  0.85308284,  0.63227215],
   [ 0.57239625,  0.06276943,  0.1069803 ],
   [ 0.71627613,  0.66454443,  0.56771438],
   [ 0.24595493,  0.01007568,  0.84959605],
   [ 0.99158904,  0.25034553,  0.00144037],
   [ 0.43292656,  0.9247424 ,  0.5123086 ],
   [ 0.07224077,  0.57230282,  0.88522979],
   [ 0.55665913,  0.20119776,  0.58865823],
   [ 0.55129624,  0.26226446,  0.63070611]])

Затем я нахожу индексы максимальных элементов вдоль столбцов:

indexes = np.argmax(x, axis=0)

array([5, 6, 7])

Пока все хорошо.

Но как мне получить эти элементы?То есть как мне получить ?some_operation?(x, indexes) == [0.99158904, 0.9247424, 0.88522979]?

Обратите внимание, что мне нужны и индексы, и связанные с ними значения.

Лучшее, что я мог придумать, было x[indexes, range(x.shape[1])], но выглядитдовольно сложный и неэффективный.Есть ли более идиоматический способ?

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете использовать np.amax, чтобы найти максимальное значение вдоль оси.

Используя ваш пример (x - исходный массив в вашем сообщении):

In[1]: np.argmax(x, axis=0)
Out[1]: 
array([5, 6, 7], dtype=int64)

In[2]: np.amax(x, axis=0)
Out[2]: 
array([ 0.99158904,  0.9247424 ,  0.88522979])

Документация ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...