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

时间:2018-04-22 09:14:57

标签: julia linear-algebra

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

aa=rand(3,3);
diag(aa)=ones(3)
  方法定义中的

错误:函数LinAlg.diag必须是显式的   导入为扩展

我也尝试使用diag(aa)=[1,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