在Julia中分配矩阵的对角线值,得到“方法定义错误”

Xia*_*ong 5 linear-algebra julia

我想将矩阵的对角线元素设置为1,所以我使用diag()函数,但是出现错误。

aa=rand(3,3);
diag(aa)=ones(3)
Run Code Online (Sandbox Code Playgroud)

方法定义中的错误:必须显式导入函数LinAlg.diag才能进行扩展

我也尝试使用diag(aa)=[1,1,1],但似乎也不起作用。如何解决这个问题。

phi*_*ler 7

首先,diag(aa) = ones(3)是Matlab语法,无法正常运行。在Julia中,它是的方法定义diag,这就是为什么会出现该错误的原因。您必须像C样式语言一样使用方括号来建立索引。(也许还要阅读与Matlab区别,以避免将来出现意外。)

要回答这个问题,您可以LinearAlgebra.diagind用来获取对角线的索引,并1通过广播为其分配:

julia> diagind(aa)
1:4:9

julia> aa[diagind(aa)] .= 1
3-element SubArray{Float64,1,Array{Float64,1},Tuple{StepRange{Int64,Int64}},true}:
 1.0
 1.0
 1.0

julia> aa
3×3 Array{Float64,2}:
 1.0       0.726595  0.195829
 0.37975   1.0       0.882588
 0.604239  0.309412  1.0
Run Code Online (Sandbox Code Playgroud)