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],但似乎也不起作用。如何解决这个问题。
首先,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)