2017-01-13 11 views
3

В Julia вы можете использовать findmax или indmax, чтобы найти индекс самой большой записи в матрице. Но если у вас есть несколько записей с этим максимальным значением, вы получаете индекс первого. Как я могу получить индексы всех максимальных значений в матрице?Julia: Найти индексы всех максимумов

ответ

5

Если это не является узким местом

A = [1, 2, 3, 3, 3] 
A_max = maximum(A) 
find(a->a==A_max, A) 

даст вам то, что вам нужно, но это не идти по массиву в два раза.

3

Вы также можете использовать понимание. Массив будет повторяться дважды.

v = [1, 2, 3, 3, 3] 
maxval = maximum(v) 
positions = [i for (i, x) in enumerate(v) if x == maxval] 

Если производительность является критическим, то следующий алгоритм может работать: требуется

function findallmax(arr) 
    max_positions = Vector{Int}() 
    min_val = typemin(eltype(arr)) 
    for i in eachindex(arr) 
     if arr[i] > min_val 
      min_val = arr[i] 
      empty!(max_positions) 
      push!(max_positions, i) 
     elseif arr[i] == min_val 
      push!(max_positions, i) 
     end 
    end 
    max_positions 
end 

одна итерация.

Смежные вопросы