Convert a vector to a binary matrix
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Utkarsh Barsaiyan
il 2 Gen 2018
Modificato: Pawel Jastrzebski
il 2 Gen 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 Commenti
Risposta accettata
Guillaume
il 2 Gen 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 Commenti
Più risposte (1)
Pawel Jastrzebski
il 2 Gen 2018
Modificato: Pawel Jastrzebski
il 2 Gen 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 Commenti
Birdman
il 2 Gen 2018
What is the best way to do this preferably without using loops?
Do not use loop.
Vedere anche
Categorie
Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!