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

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

【问题讨论】:

    标签: max julia indices


    【解决方案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 = 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
    

    需要一次迭代。

    【讨论】:

    • findallmax 的性能在很大程度上取决于找到的新最大值的数量。 IE。 findallmax(1:2000)findallmax(2000:-1:1) 长 10 倍,在这种情况下也比 findall(A .== maximum(A)) 长。
    猜你喜欢
    • 2013-06-12
    • 2018-05-05
    • 1970-01-01
    • 2012-03-05
    • 2021-04-28
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多