using LinearAlgebra;
a = rand(4,1);
B = diagm(a);
C = Diagonal(a);
上述代码在创建对角矩阵时出现了错误(不是预期的结果)。
如果
a = [1 2 3 4]
,我需要一个像这样的矩阵:
D = [1 0 0 0;0 2 0 0;0 0 3 0;0 0 0 4].
C = Diagonal(a)创建一个包含a元素的对角线向量C,其中a是一维列向量。
B = diagm(a);会出现错误信息:
错误消息:ERROR: MethodError: no method matching diagm(::Matrix{Float64})
您可能使用了一个二维行向量,而需要的是一维列向量。请注意一维列向量[1,2,3]和二维行向量[1 2 3]之间的区别。您可以使用vec()函数将其转换为列向量。最接近的候选项是:
diagm(::Pair{var"#s832", var"#s831"} where {var"#s832" <: Integer, var"#s831" <: (AbstractVector{T} where T)}...) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:279
diagm(::Integer, ::Integer, ::Pair{var"#s832", var"#s831"} where {var"#s832" <: Integer, var"#s831" <: (AbstractVector{T} where T)}...) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:280
diagm(::AbstractVector{T} where T) at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:329
... Stacktrace: [1] top-level scope @ REPL[16]:1