Create a diagonal matrix with a for loop from a vector
古いコメントを表示
I want to use the ML vector to create a diagonal matrix of only the values of the ML vector on the diagonal and make a new ML matrix with zeros everywhere else and the values of the ML vector along the diagonal of the new ML matrix. Essentially I am trying to write the code for diag(ML).
ML = rand([5 1])
for j = 1:length(ML)
for i = 1:j
if i < j
ML(i,j) == 0
elseif i > j
ML(i,j) == 0
else
ML(i,j) = ML(j)
end
end
end
採用された回答
その他の回答 (1 件)
Here are three way to define a diagonal in a square matrix of zeros that do not require a loop.
eye()
ML = rand([5 1])
Mout = eye(numel(ML)).*ML
Indexing with sub2ind
n = numel(ML);
Mout = zeros(n);
ind = sub2ind([n,n],1:n,1:n);
Mout(ind) = ML
Indexing without sub2ind
This shortcut works because we're working with a square matrix.
n = numel(ML);
Mout = zeros(n);
Mout(1:n+1:end) = ML
1 件のコメント
Dyuman Joshi
2023 年 4 月 1 日
I wonder if this is also the implementation in diag(input) or diag(input,0)
カテゴリ
ヘルプ センター および File Exchange で Operating on Diagonal Matrices についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!