【问题标题】:Make n dimensional diagonal tensor in Julia在Julia中制作n维对角张量
【发布时间】:2018-09-24 20:43:04
【问题描述】:

例如,让我们用a[i][j][k] 表示 3d 张量的第 ijk'th 元素。假设 3d 张量在每个维度上具有相同的大小。然后我想用constant[i] 填充a[i][i][i]i 从1 到n。我希望所有其他元素都为 0。创建一个 for 循环是我唯一的方法吗?

【问题讨论】:

    标签: matrix initialization julia tensor diagonal


    【解决方案1】:

    你可以使用理解:

    a = [i==j==k ? constant[i] : 0.0 for i=1:n, j=1:n, k=1:n]
    

    【讨论】:

    • 酷!几乎说列表理解,但那将是 Python。
    【解决方案2】:

    如果a 已经存在(例如a = zeros(n, n, n)),您可以使用以下函数来索引主对角线,这应该适用于任何维度(也适用于非对称情况):

    diagind(A::AbstractArray{T,N} where T) where N = CartesianIndex.(fill(1:minimum(size(A)), N)...)
    

    那你就可以简单的广播了:

    a[diagind(a)] .= constant
    

    如果输入总是被假定为对角线,minimum(size(A)) 当然可以只替换为N

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      相关资源
      最近更新 更多