给定每列的选择索引,从2D数组构造一维数组

时间:2017-10-20 20:00:28

标签: arrays julia

我有一个2D数组,例如:

julia> m = [1 2 3 4 5
            6 7 8 9 10
            11 12 13 14 15]
3×5 Array{Int64,2}:
  1   2   3   4   5
  6   7   8   9  10
 11  12  13  14  15

我想从每列中选择一个值并构建一维数组。

例如,如果我的选择是

julia> choices = [1, 2, 3, 2, 1]
5-element Array{Int64,1}:
 1
 2
 3
 2
 1

然后所需的输出为[1, 7, 13, 9, 5]。最好的方法是什么?在我的特定应用程序中,我随机生成这些值,例如

choices = rand(1:size(m)[1], size(m)[2])

谢谢!

1 个答案:

答案 0 :(得分:3)

这可能是最简单的方法: [m[c, i] for (i, c) in enumerate(choices)]

编辑: 如果最好的方法对你来说最快,那么这个函数应该比对大m的理解快大约2倍:

function selector(m, choices)
    v = similar(m, size(m, 2))
    for i in eachindex(choices)
        @inbounds v[i] = m[choices[i], i]
    end
    v
end