2017-01-13 9 views
3

ジュリアでは、findmaxまたはindmaxを使用して、マトリックス内で最大のエントリのインデックスを見つけることができます。しかし、この最大値を持つ複数のエントリがある場合は、最初のインデックスのインデックスが取得されます。 マトリックスのすべての最大値エントリのインデックスを取得するにはどうすればよいですか?ジュリア:すべての最大値のインデックスを見つける

答えて

5

これがボトルネックでない場合

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

はあなたが必要なものを与えるだろうが、それは二回、アレイの上に行くん。

3

また、理解を使用することもできます。配列は2回反復されます。パフォーマンスが重要な場合

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 

一回の反復が必要です。

関連する問題