Convert a vector to a binary matrix
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Utkarsh Barsaiyan
le 2 Jan 2018
Modifié(e) : Pawel Jastrzebski
le 2 Jan 2018
y = [1; 1; 2; 3; 4; 4];
I want to convert this to a matrix such that in each row the corresponding element is 1 and the rest are zero.
y = [1 0 0 0;
1 0 0 0;
0 1 0 0;
0 0 1 0;
0 0 0 1];
What is the best way to do this preferably without using loops?
0 commentaires
Réponse acceptée
Guillaume
le 2 Jan 2018
Use sub2ind to transform row/column coordinates in linear indices and use that linear index to assign to your destination matrix:
y = [1; 1; 2; 3; 4; 4];
newy = zeros(numel(y), max(y));
newy(sub2ind(size(newy), 1:numel(y), y')) = 1
0 commentaires
Plus de réponses (1)
Pawel Jastrzebski
le 2 Jan 2018
Modifié(e) : Pawel Jastrzebski
le 2 Jan 2018
With LOOP:
y = [1; 1; 2; 3; 4; 4];
nRow = length(y);
nCol = max(y);
A = zeros(nRow,nCol);
for i=1:nRow
A(i,y(i)) = 1;
end
A
WITHOUT LOOP:
y1 = [1; 1; 2; 3; 4; 4];
nRow1 = length(y1);
nCol1 = max(y1);
A1 = zeros(nRow1,nCol1);
index = (y1-1).*nRow1+(1:nRow1)';
A1(index) = 1;
A1
2 commentaires
Birdman
le 2 Jan 2018
What is the best way to do this preferably without using loops?
Do not use loop.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!