代码之家  ›  专栏  ›  技术社区  ›  Xia.Song

在Julia中,指定矩阵的对角值,获取“方法定义中的错误”

  •  5
  • Xia.Song  · 技术社区  · 6 年前

    我想把矩阵的对角元素设为1,所以我使用 diag() 函数,但我出错了。

    aa=rand(3,3);
    diag(aa)=ones(3)
    

    方法定义错误:函数LinAlg。diag必须明确 导入以扩展

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

    1 回复  |  直到 6 年前
        1
  •  15
  •   crlb    5 年前

    首先 diag(aa) = ones(3) 是Matlab语法,不能像您想的那样工作。在Julia中,它是 diag ,这就是为什么会出现该错误。您必须使用方括号进行索引,就像在C风格的语言中一样。(或许可以阅读 differences from 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