在 Julia 中收集数组的元素

Mar*_*ion 2 arrays collections julia

我想了解如何能够收集 n × m 维数组的元素并将它们存储到 m 维的 n 向量中。例如,我有以下 3 x 2 数组,我想将每一行的对存储到一个向量中。

Array1 = [ 1 0; 2 0; 3 0]
Run Code Online (Sandbox Code Playgroud)

这给出了:

3×2 Array{Int64,2}:
1  0
2  0
3  0
Run Code Online (Sandbox Code Playgroud)

这个想法是制作一个 for 循环,在每次迭代中将上面数组的值存储到一个二维向量中。

我不知道该怎么做,因为collect到目前为止,该函数只会从我的实验中保存同一列的元素。

那么如何将每一对存储到一个向量中呢?

And*_*kin 5

它可以很简单 collect(eachrow(Array1))

julia> collect(eachrow(Array1))
3-element Vector{SubArray{Int64, 1, Matrix{Int64}, Tuple{Int64, Base.Slice{Base.OneTo{Int64}}}, true}}:
 [1, 0]
 [2, 0]
 [3, 0]
Run Code Online (Sandbox Code Playgroud)

这是简短的,更重要的是,类型稳定,因此它比Any[]解决方案更高效。但它创建view的底层Matrix有时不是你想要的,特别是考虑到 Julia 是面向列的,所以行视图会相对较慢。如果是这样的话,你可以去

julia> collect.(eachrow(Array1))
3-element Vector{Vector{Int64}}:
 [1, 0]
 [2, 0]
 [3, 0]
Run Code Online (Sandbox Code Playgroud)

这仍然非常快。

但是您也可以考虑使用这种结构。例如,如果您只想遍历行,那么根本不需要收集,您可以eachrow直接使用而无需中间物化。