如何从一个向量生成对角矩阵


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

最新更新