Create a diagonal matrix with a for loop from a vector

14 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

Dyuman Joshi
Dyuman Joshi il 1 Apr 2023
Modificato: Dyuman Joshi il 1 Apr 2023
(If you are required to use a loop)
It is better to use another variable to get an output.
ML = rand([5 1])
ML = 5×1
0.7725 0.4016 0.8767 0.9691 0.1817
Pre-allocate output matrix according to the size.
%Using max() in case ML is a row vector
Mout = zeros(max(size(ML)))
Mout = 5×5
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
%You can also obtain the result without double for loop
for j = 1:numel(ML)
%Directly define the values
Mout(j,j)=ML(j);
end
Mout
Mout = 5×5
0.7725 0 0 0 0 0 0.4016 0 0 0 0 0 0.8767 0 0 0 0 0 0.9691 0 0 0 0 0 0.1817

Più risposte (1)

Adam Danz
Adam Danz il 1 Apr 2023
Modificato: Adam Danz il 1 Apr 2023
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])
ML = 5×1
0.2650 0.0656 0.8188 0.8268 0.6532
Mout = eye(numel(ML)).*ML
Mout = 5×5
0.2650 0 0 0 0 0 0.0656 0 0 0 0 0 0.8188 0 0 0 0 0 0.8268 0 0 0 0 0 0.6532
Indexing with sub2ind
n = numel(ML);
Mout = zeros(n);
ind = sub2ind([n,n],1:n,1:n);
Mout(ind) = ML
Mout = 5×5
0.2650 0 0 0 0 0 0.0656 0 0 0 0 0 0.8188 0 0 0 0 0 0.8268 0 0 0 0 0 0.6532
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
Mout = 5×5
0.2650 0 0 0 0 0 0.0656 0 0 0 0 0 0.8188 0 0 0 0 0 0.8268 0 0 0 0 0 0.6532

Categorie

Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by