Vin*_*nod 9 matrix diagonal julia
using LinearAlgebra;
a = rand(4,1);
B = diagm(a);
C = Diagonal(a);
Run Code Online (Sandbox Code Playgroud)
上面的代码在创建对角矩阵时会导致错误/(不是有意的)。
如果a = [1 2 3 4]
我需要一个像这样的矩阵:
D = [1 0 0 0;0 2 0 0;0 0 3 0;0 0 0 4].
Run Code Online (Sandbox Code Playgroud)
C = 对角线(a) 创建 C = [1]
B = 图(a);给出错误消息:
错误消息:错误:MethodError:没有方法匹配 diagm(::Matrix{Float64})
您可能在需要 1d 列向量的情况下使用了 2d 行向量。请注意 1d 列向量 [1,2,3] 和 2d 行向量 [1 2 3] 之间的区别。您可以使用 vec() 函数转换为列向量。最接近的候选者是:diagm(::Pair{var"#s832", var"#s831"} where {var"#s832"<:Integer, var"#s831"<:(AbstractVector{T} where T)}。 ..) 在 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)}...) 在 C:\buildbot\worker \package_win64\build\usr\share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:280 diagm(::AbstractVector{T} where T) 位于 C:\buildbot\worker\package_win64\build\usr \share\julia\stdlib\v1.6\LinearAlgebra\src\dense.jl:329 ... Stacktrace: [1] 顶级范围 @ REPL[16]:1
Bil*_*ill 10
我认为问题是你的a矩阵。
尝试这个:
\na = [1,2,3,4] # 4-element Vector{Int64}\nC = Diagonal(a)\n4\xc3\x974 Diagonal{Int64, Vector{Int64}}:\n 1 \xe2\x8b\x85 \xe2\x8b\x85 \xe2\x8b\x85\n \xe2\x8b\x85 2 \xe2\x8b\x85 \xe2\x8b\x85\n \xe2\x8b\x85 \xe2\x8b\x85 3 \xe2\x8b\x85\n \xe2\x8b\x85 \xe2\x8b\x85 \xe2\x8b\x85 4\nRun Code Online (Sandbox Code Playgroud)\n或者,创建一个真正的对角矩阵:
\nM = diagm(a)\n4\xc3\x974 Matrix{Int64}:\n 1 0 0 0\n 0 2 0 0\n 0 0 3 0\n 0 0 0 4\nRun Code Online (Sandbox Code Playgroud)\n