想象一下,你有一个Float64类型的3维Julia数组A
size(A) = (2, 3, 3)
。
如何使用二维数组一次分配此数组的块?例如,假设我希望A[1, :, :]
成为单位矩阵。我会想到做这样的事情:
A = Array(Float64, 2, 3, 3)
A[1, :, :] = eye(3)
当我这样做时,我收到以下错误:
ERROR: argument dimensions must match
in setindex! at array.jl:592
我知道这是因为size(A[1, :, :]) = (1, 3, 3)
,但我无法弄清楚如何让这个切片只是(3, 3)
所以eye(3)
适合或2)制作eye(3)
也(1, 3, 3)
符合A
切片的形状。
有什么建议吗?
我学到了两件新东西:
A
,则结果是二维数组而不是三维数组,其前导维度为1. A[1, :, :] = reshape(eye(3), (1, 3, 3))
找到了对我的具体问题的临时修复。这是次优的,我希望能有更好的解决方法。答案 0 :(得分:7)
您可能正在寻找slice
:
julia> sA = slice(A, 1, :, :)
3x3 SubArray of 2x3x3 Float64 Array:
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
julia> sA[:] = eye(3)
3x3 Float64 Array:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> A
2x3x3 Float64 Array:
[:, :, 1] =
1.0 0.0 0.0
0.0 0.0 0.0
[:, :, 2] =
0.0 1.0 0.0
0.0 0.0 0.0
[:, :, 3] =
0.0 0.0 1.0
0.0 0.0 0.0