使朱莉娅ñ维角张量

问题描述 投票:1回答:2

例如,让我们ijk表示三维张量的a[i][j][k]'th元素。比方说,三维张量在每个维度的大小相同。然后我想通过a[i][i][i]从1 constant[i]i填写n。我希望所有其他元素为0正在一个循环我唯一的出路?

matrix initialization julia tensor diagonal
2个回答
4
投票

你可以使用一个理解:

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

0
投票

如果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所取代。

© www.soinside.com 2019 - 2024. All rights reserved.