【发布时间】: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
例如,让我们用a[i][j][k] 表示 3d 张量的第 ijk'th 元素。假设 3d 张量在每个维度上具有相同的大小。然后我想用constant[i] 填充a[i][i][i] 为i 从1 到n。我希望所有其他元素都为 0。创建一个 for 循环是我唯一的方法吗?
【问题讨论】:
标签: matrix initialization julia tensor diagonal
你可以使用理解:
a = [i==j==k ? constant[i] : 0.0 for i=1:n, j=1:n, k=1:n]
【讨论】:
如果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。
【讨论】: