分配多维数组的块

时间:2013-08-13 07:11:50

标签: julia

想象一下,你有一个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切片的形状。

有什么建议吗?

编辑太平洋标准时间上午12:51 8-13-13


我学到了两件新东西:

  1. 如果沿其他两个维度中的任何一个取一片A,则结果是二维数组而不是三维数组,其前导维度为1.
  2. 我通过A[1, :, :] = reshape(eye(3), (1, 3, 3))找到了对我的具体问题的临时修复。这是次优的,我希望能有更好的解决方法。

1 个答案:

答案 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