Эффективный способ получения минимальных / максимальных n значений и индексов из матрицы с использованием Python и NumPy

Какой эффективный способ, учитывая матрицу NumPy (2D-массив), вернуть минимальные / максимальные n значения (вместе с их индексами) в массиве?

В настоящее время у меня есть :

def n_max(arr, n):
    res = [(0,(0,0))]*n
    for y in xrange(len(arr)):
        for x in xrange(len(arr[y])):
            val = float(arr[y,x])
            el = (val,(y,x))
            i = bisect.bisect(res, el)
            if i > 0:
                res.insert(i, el)
                del res[0]
    return res

Это занимает в три раза больше времени, чем алгоритм сопоставления шаблонов изображений, который pyopencv делает для генерации массива, на котором я хочу это запустить, и я считаю, что это глупо.

10
задан Peter Mortensen 28 June 2018 в 02:44
поделиться