【问题标题】:Assign blocks of multi-dimensional array分配多维数组块
【发布时间】:2013-08-13 07:11:49
【问题描述】:

假设您有一个 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),但我不知道如何 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)) 找到了针对特定问题的临时解决方案。这是次优的,我希望得到更好的解决方案。

【问题讨论】:

    标签: julia


    【解决方案1】:

    您可能正在寻找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
    

    【讨论】:

    • 这似乎可行,谢谢。您知道创建sA=slice(...) 然后更改sA 是否比我在上面找到的reshape 解决方案更有效?
    猜你喜欢
    • 2017-03-18
    • 2014-02-08
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多