例如,让我们ijk
表示三维张量的a[i][j][k]
'th元素。比方说,三维张量在每个维度的大小相同。然后我想通过a[i][i][i]
从1 constant[i]
到i
填写n
。我希望所有其他元素为0正在一个循环我唯一的出路?
你可以使用一个理解:
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
所取代。