朱莉娅:找到所有最大值的索引
Julia: Find the indices of all maxima
在 Julia 中,您可以使用 findmax
或 indmax
来查找矩阵中最大条目的索引。但是,如果您有 多个 条目具有此最大值,您将获得第一个条目的索引。
如何获取矩阵中所有最大值条目的索引?
如果这不是瓶颈
A = [1, 2, 3, 3, 3]
A_max = maximum(A)
find(a->a==A_max, A)
会给你你需要的东西,但它会遍历数组两次。
你也可以使用推导式。该数组将被迭代两次。
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
需要一次迭代。
在 Julia 中,您可以使用 findmax
或 indmax
来查找矩阵中最大条目的索引。但是,如果您有 多个 条目具有此最大值,您将获得第一个条目的索引。
如何获取矩阵中所有最大值条目的索引?
如果这不是瓶颈
A = [1, 2, 3, 3, 3]
A_max = maximum(A)
find(a->a==A_max, A)
会给你你需要的东西,但它会遍历数组两次。
你也可以使用推导式。该数组将被迭代两次。
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
需要一次迭代。