2017-01-13 91 views
3

在Julia中,您可以使用findmaxindmax查找矩陣中最大條目的索引。但是,如果您有多個條目具有此最大值,則會得到第一個的索引。 如何獲得矩陣中所有最大值條目的索引?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 

一個迭代。