我有一栏:
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.