using LinearAlgebra;
a = rand(4,1);
B = diagm(a);
C = Diagonal(a);
上面的代码在创建对角矩阵时会导致错误/(不是有意的)。
ifa = [1 2 3 4]
我需要一个这样的矩阵:
D = [1 0 0 0;0 2 0 0;0 0 3 0;0 0 0 4].
C =对角线(a)创建C = [1]
B = diagm(a);给出错误信息:
错误消息:Error: MethodError: no method matchingdiagm(::矩阵{Float64})
你可能用了2d行向量,而1d列向量是必需的。注意1d列向量[1,2,3]和2d之间的区别行向量[1 2 3]。您可以使用vec()将其转换为列向量函数。最接近的候选是:diagm(::Pair{var"#s832";var"#s831"} where {var"#s832"<:整数,var"#s831"<:(AbstractVector{T}在哪里C: buildbot 工人 package_win64 制造 usr 茱莉亚 stdlib 分享v1.6 LinearAlgebra src dense.jl: 279diagm(::Integer,::Integer,::Pair{var"#s832", var"#s831"} where{var"#s832"<:整数,var"#s831"<:(AbstractVector{T} where T)}…)atC: buildbot 工人 package_win64 制造 usr 茱莉亚 stdlib 分享v1.6 LinearAlgebra src dense.jl: 280diagm(::AbstractVector{T} where T) atC: buildbot 工人 package_win64 制造 usr 茱莉亚 stdlib 分享v1.6 LinearAlgebra src dense.jl: 329…Stacktrace:[1]顶层作用域@ REPL[16]:1
我想问题出在你的a
是矩阵。
试试这个:
a = [1,2,3,4] # 4-element Vector{Int64}
C = Diagonal(a)
4×4 Diagonal{Int64, Vector{Int64}}:
1 ⋅ ⋅ ⋅
⋅ 2 ⋅ ⋅
⋅ ⋅ 3 ⋅
⋅ ⋅ ⋅ 4
或者,要得到一个真对角矩阵:
M = diagm(a)
4×4 Matrix{Int64}:
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4