如何从A向量得到对角矩阵

cMi*_*nor 15 matlab

我有一栏:

0.0677
0.0584
0.0487
0.0453
0.0394
Run Code Online (Sandbox Code Playgroud)

什么指令将获得以下输出

0.0677   0          0         0          0
0        0.0584     0         0          0
0        0          0.0487    0          0
0        0          0         0.0453     0
0        0          0         0          0.0394
Run Code Online (Sandbox Code Playgroud)

小智 25

diag是正常的MATLAB解决方案(正如posdef所指出的那样)

D = diag(vec);
Run Code Online (Sandbox Code Playgroud)

根据需要为您提供带对角元素的矩阵.

在某些应用中可能更好的是创建稀疏矩阵,因为对角矩阵非常稀疏.因此,如果您正在进行矩阵乘法运算,这将极大地减少不必要的操作数量.

n = length(vec);
D = spdiags(vec(:),0,n,n);
Run Code Online (Sandbox Code Playgroud)

如果您真的想以显式形式进行赋值,请使用单个线性索引,如下所示:

n = length(vec);
D = zeros(n);
D(cumsum([1,repmat(n+1,1,n-1)])) = vec;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用sub2ind函数将一组索引转换为单个索引.


pos*_*def 13

如果我没记错的话,有一个叫做类似的命令 diag(A)

编辑:在这里,您可以访问http://www.mathworks.com/help/techdoc/ref/diag.html上的一些文档diag

特别注意报价:

X = diag(v)将v放在主对角线上,与上面相同,k = 0.