我有一个返回二维数组的函数。
如果我map
这个函数到UnitRange
我得到一维二维数组的数组。
是否有一种巧妙的方法将其收集到一个三维数组?
y = rand(3,3)
f(x) = y * x
map(f, 1:9)
这将产生9-element Array{Array{Float64},2}
而不是Array{Float64,3}
。
使用理解也可以实现同样的目标。
答案 0 :(得分:1)
cat
功能
cat(dims, A...)
沿指定连接输入数组 可迭代dims中的维度。
例如,以下con cat
在第三维中添加两个2D数组。
julia> A = collect(reshape(1:9, 3, 3));
julia> B = collect(reshape(10:18, 3, 3));
julia> cat(3, A, B)
3×3×2 Array{Int64,3}:
[:, :, 1] =
1 4 7
2 5 8
3 6 9
[:, :, 2] =
10 13 16
11 14 17
12 15 18
将此应用于您的情况,您可以跨阵列数组foldl
...
foldl((A,B) -> cat(3, A, B), map(f, 1:9))
但是,对于更清晰的解决方案,您可以使用splat(...
)运算符将所有数组结果传递给cat
函数的单个调用。
cat(3, map(f, 1:9)...)