2017-01-13 1 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 

하나의 반복이 필요합니다.

관련 문제