首页 > 解决方案 > 在 Julia 中收集数组的元素

问题描述

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

Array1 = [ 1 0; 2 0; 3 0]

这给出了:

3×2 Array{Int64,2}:
1  0
2  0
3  0

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

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

那么我怎样才能将每一对存储到一个向量中呢?

标签: arrayscollectionsjulia

解决方案


它可以很简单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]

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

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

这仍然非常快。

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


推荐阅读