Самый быстрый способ найти два минимальных значения в каждом столбце массива NumPy - PullRequest
1 голос
/ 27 мая 2020

Если я хочу найти минимальное значение в каждом столбце массива NumPy, я могу использовать функцию numpy .amin (). Однако есть ли способ найти два минимальных значения в каждом столбце, который быстрее, чем сортировка каждого столбца?

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Вы можете просто использовать np.partition вдоль столбцов, чтобы получить наименьшие N числа -

N = 2
np.partition(a,kth=N-1,axis=0)[:N]

На самом деле это не сортирует все данные, а просто разделяет их на два разделов , так что наименьшие N чисел находятся в первом разделе , также называемом partial-sort.

Бонус (получение N первых элементов): Точно так же, чтобы получить верхние N чисел на столбец, просто используйте отрицательное kth значение -

np.partition(a,kth=-N,axis=0)[-N:]

Вдоль других осей и более высоких тусклых массивов

Чтобы использовать его по другим осям, измените значение axis. Таким образом, по строкам это будет axis=1 для 2D-массива и аналогичное расширение для ndarrays более высокого измерения.

0 голосов
/ 27 мая 2020

Используйте метод min () и укажите ось, по которой вы хотите усреднить:

a = np.random.rand(10,3)
a.min(axis=0)

дает:

array([0.04435587, 0.00163139, 0.06327353])


a.min(axis=1)

дает

array([0.01354386, 0.08996586, 0.19332211, 0.00163139, 0.55650945,
       0.08409907, 0.23015718, 0.31463493, 0.49117553, 0.53646868])
...