我想将矩阵的对角元素设置为1,所以我使用diag()
函数,但是我得到了错误。
aa=rand(3,3);
diag(aa)=ones(3)
方法定义中的错误:函数LinAlg.diag必须是显式的 导入为扩展
我也尝试使用diag(aa)=[1,1,1]
,但它似乎也行不通。
怎样才能解决这个问题。
答案 0 :(得分:5)
首先,diag(aa) = ones(3)
是Matlab语法,并不像您想象的那样有效。在Julia中,它是diag
的方法定义,这就是您得到该错误的原因。您必须使用方括号来建立索引,就像在C风格的语言中一样。 (也许可以阅读differences from Matlab以避免将来出现意外。)
要回答这个问题,您可以使用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