关于维数大于三维的数组的生成和运算问题


#1

请问,如何生成一个三维数组。类似于A[M, N, O]这样的矩阵。
生成之后矩阵乘法是怎样运算的,能否选择第一维和第二维进行乘法运算,第三维保持不变
另,假设我现在有一个二维数组,我怎么在第三维上repeat,把他变成三维的啊


#2

生成多维数组的方式与二维数组类似,只需在调用诸如 zerosones 等函数时将 dims 参数设置为多个整数即可,比如:

julia> zeros(2, 2, 2)
2×2×2 Array{Float64,3}:
... # 省略输出

三维数组在 Julia 中没有定义乘法,在数学上我记得好像也没有类似的定义。但你说的运算可以用索引实现:

julia> A = rand(2, 2, 2); B = rand(2, 2, 2); C = similar(A);
julia> let C = C
           for i in 1:2  # 跳过维数检查
               C[:, :, i] = A[:, :, i] + B[:, :, i]
           end
           C
       end
2×2×2 Array{Float64,3}:
... # 省略输出

repeat 函数按理说应该可以像 zeros 函数那样用,但是我在直接这样做时出现了以下错误:

julia> A = rand(2, 2); repeat(A, 1, 1, 2)
ERROR: BoundsError: attempt to access 2×2×2 Array{Float64,3} at index [Base.OneTo(2), Base.OneTo(2)]
S
... # 省略栈追踪信息

而这样却可以正常运行:

julia> A = rand(2, 2); repeat(A, 1, 1, 1)
2×2×1 Array{Float64,3}:
[:, :, 1] =
 0.697096  0.170141
 0.551919  0.976475

这是一个相关的 issue,已经被解决了。