5

想象一下,您有一个AFloat64 类型的 3 维 Julia 数组,其中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),但我不知道如何 1)让这个切片(3, 3)非常eye(3)适合或 2)使eye(3)(1, 3, 3)符合切片的形状A

有什么建议么?

编辑 12:51 AM PST 8-13-13


我学到了两个新东西:

  1. 如果我A沿其他两个维度中的任何一个进行切片,则结果是一个二维数组,而不是一个前导维度为 1 的 3 维数组。
  2. 我通过做A[1, :, :] = reshape(eye(3), (1, 3, 3)). 这是次优的,我希望有更好的解决方案。
4

1 回答 1

8

您可能正在寻找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
于 2013-08-14T07:39:03.643 回答