2017-10-20 45 views
2

構造一維數組我有一個2D陣列如:鑑於對於每一列的選擇的索引,從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]) 

謝謝!

回答

3

這可能是最簡單的方法: [m[c, i] for (i, c) in enumerate(choices)]

編輯: 如果最佳手段最快的爲你這樣的功能應該是大約2倍的速度比修真大m

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