В Julia вы можете использовать findmax
или indmax
, чтобы найти индекс самой большой записи в матрице. Но если у вас есть несколько записей с этим максимальным значением, вы получаете индекс первого. Как я могу получить индексы всех максимальных значений в матрице?Julia: Найти индексы всех максимумов
3
A
ответ
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
одна итерация.