我有一个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)
但我觉得有一种更好,更聪明的方式.
怎么样?
julia> maximum((A[i],i) for i in S)
(9, 6)
Run Code Online (Sandbox Code Playgroud)
这取决于元组按字典顺序排序的事实.这仅迭代子集,因此当S元素明显少于时,它应该更快A.
maximumfindmaxDan Getz指出,这是一个比这里更好的选择.
这更详细,但在我的计算机上大约是生成器解决方案(版本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)