Julia如何从向量生成对角矩阵及相关代码报错解决
问题原因
你代码里构造的a是二维Matrix类型(不管是rand(4,1)生成的4×1列矩阵,还是[1 2 3 4]生成的1×4行矩阵,都属于二维矩阵),而LinearAlgebra库中的diagm和Diagonal方法要求传入一维Vector类型作为对角线元素源,所以才会触发报错或者返回不符合预期的结果。
解决方案
方案1:直接构造一维向量
如果是你自己生成a,直接生成一维向量即可,不需要额外指定第二个维度:
using LinearAlgebra # 生成4个元素的一维随机向量 a = rand(4) # 手动定义的话用逗号分隔元素,生成的就是一维向量 # a = [1,2,3,4] # 两种生成对角矩阵的写法都可以正常运行 # diagm返回普通稠密矩阵 B = diagm(a) # Diagonal返回仅存储对角线元素的特殊对角矩阵类型,运算效率更高 C = Diagonal(a)
方案2:将已有二维矩阵转换为一维向量
如果你拿到的a已经是二维矩阵,用vec()函数转成一维向量后再传入即可:
using LinearAlgebra # 示例:已有二维行矩阵 a = [1 2 3 4] # 转换为一维向量 a_vec = vec(a) B = diagm(a_vec) C = Diagonal(a_vec)
补充说明
diagm()返回的是普通稠密矩阵类型Matrix,所有零元素也会占用存储空间,适合后续需要修改非对角线元素的场景Diagonal()返回的是特殊的Diagonal类型,仅存储对角线元素,内存占用小,矩阵运算效率更高,适合不需要修改非对角线元素的场景
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

