Julia映射将2维数组返回到3维数组的函数

时间:2017-03-08 10:17:35

标签: function multidimensional-array julia

我有一个返回二维数组的函数。 如果我map这个函数到UnitRange我得到一维二维数组的数组。 是否有一种巧妙的方法将其收集到一个三维数组?

y = rand(3,3)
f(x) = y * x
map(f, 1:9)

这将产生9-element Array{Array{Float64},2}而不是Array{Float64,3}。 使用理解也可以实现同样的目标。

1 个答案:

答案 0 :(得分:1)

根据Julia documentation

,您可以使用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)...)