我有一个二维数组,例如:
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])
谢谢!
最佳答案
这可能是最简单的方法:
[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
关于arrays - 给定每列的选择索引,从 2D 数组构造 1D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856477/