如何在julialang中查找元素子集的最大索引?

Rib*_*ibz 6 julia

我有一个A=[3, 5, 1, 2, 7, 9, 10, 2, 3]长度数组length(A)=9和一个S包含索引子集的集合1:9,例如S=Set([1, 3, 6, 8]).我想找到Aover 的最大值(值和索引)S.也就是说,最大值是9和索引6.

我试着这样做

A = [3, 5, 1, 2, 7, 9, 10, 2, 3];
S = Set([1, 3, 6, 8]);
B = [if i in S A[i] else 0 end for i in 1:length(A)];
findmax(B);
Run Code Online (Sandbox Code Playgroud)

但我觉得有一种更好,更聪明的方式.

ggg*_*ggg 7

怎么样?

julia> maximum((A[i],i) for i in S)
(9, 6)
Run Code Online (Sandbox Code Playgroud)

这取决于元组按字典顺序排序的事实.这仅迭代子集,因此当S元素明显少于时,它应该更快A.

maximumfindmaxDan Getz指出,这是一个比这里更好的选择.

  • 或者只是在S中使用`maximum((A [i],i)i) (2认同)

DNF*_*DNF 5

这更详细,但在我的计算机上大约是生成器解决方案(版本0.6)的2.5倍:

function mymax(A, S)
    val, ind = typemin(eltype(A)), -1
    for i in S
        val_ = A[i]
        if val_ > val
            val, ind = val_, i
        end
    end
    return val, ind
end
Run Code Online (Sandbox Code Playgroud)