在 Julia 中将 3D 数组转换为 2D 数组的数组的最有效方法是什么?

Jon*_*Kim 3 arrays julia

主题说明了一切。

我只想这样做,但对我来说,分配新数组效率很低。

julia> a = reshape(1:30, 2, 3, 5)
Run Code Online (Sandbox Code Playgroud)

进入

julia> b = [a[:, :, i] for i in 1:5]
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法将类型从 转换Array{T, 3}Array{Array{T, 2}, 1}

Bog*_*ski 5

您可以使用 SplitApplyCombine.jl 并且有一个函数splitdimsview可以完全满足您的要求:

julia> a = reshape(1:30, 2, 3, 5);

julia> b = splitdimsview(a, 3)
5-element SplitDimsArray{SubArray{Int64,2,Base.ReshapedArray{Int64,3,UnitRange{Int64},Tuple{}},Tuple{Base.Slice{Base.OneTo{Int64}},Base.Slice{Base.OneTo{Int64}},Int64},true},1,(3,),Base.ReshapedArray{Int64,3,UnitRange{Int64},Tuple{}}}:
 [1 3 5; 2 4 6]
 [7 9 11; 8 10 12]
 [13 15 17; 14 16 18]
 [19 21 23; 20 22 24]
 [25 27 29; 26 28 30]
Run Code Online (Sandbox Code Playgroud)

请注意,该对象不是Vector{Matrix}自定义对象(但具有相同的特征,除了它是一个视图)。