【发布时间】:2021-10-18 01:32:00
【问题描述】:
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) 创建 C = [1]
B = 诊断 (a);给出错误信息:
错误消息:错误:MethodError:没有方法匹配 diagm(::Matrix{Float64})
您可能使用了 2d 行向量,而 1d 列向量是 必需的。注意 1d 列向量 [1,2,3] 和 2d 之间的区别 行向量 [1 2 3]。您可以使用 vec() 转换为列向量 功能。最接近的候选者是:diagm(::Pair{var"#s832", var"#s831"} where {var"#s832"<:integer var t c: diagm ::integer ::pair where ... stacktrace>
【问题讨论】:
-
这里的错误信息其实很好,并且准确地解释了问题以及如何解决它:“您可能使用了需要 1d 列向量的 2d 行向量。注意 1d 之间的区别列向量 [1,2,3] 和 2d 行向量 [1 2 3]。您可以使用 vec() 函数转换为列向量。"