Julia:找到所有最大值的索引

Posted

技术标签:

【中文标题】Julia:找到所有最大值的索引【英文标题】:Julia: Find the indices of all maxima 【发布时间】:2017-05-28 23:05:41 【问题描述】:

在 Julia 中,您可以使用 findmaxindmax 来查找矩阵中最大条目的索引。但是,如果您有 多个 具有此最大值的条目,您将获得第一个的索引。 如何获取矩阵中所有最大值条目的索引?

【问题讨论】:

【参考方案1】:

如果这不是瓶颈

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

会给你你需要的东西,但它确实会遍历数组两次。

【讨论】:

find 可以在 v1.1.0 的文档中使用 no longer be found。 目前findall(A .== maximum(A)) 似乎有效。 findall(x->x==maximum(A), A)【参考方案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 = VectorInt()
    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

需要一次迭代。

【讨论】:

findallmax 的性能在很大程度上取决于找到的新最大值的数量。 IE。 findallmax(1:2000)findallmax(2000:-1:1) 长 10 倍,在这种情况下也比 findall(A .== maximum(A)) 长。

以上是关于Julia:找到所有最大值的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何找到int数组Python的最小值和最大值的索引[重复]

如何找到最大值的索引?

如何在 numpy 数组中找到行索引的最大值?

运筹系列68:TSP问题Held-Karp下界的julia实现

在numpy数组中找到最大上三角条目索引的有效方法?

在numpy数组上查找所有最大值