Convert a vector to a binary matrix
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Utkarsh Barsaiyan
am 2 Jan. 2018
Bearbeitet: Pawel Jastrzebski
am 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 Kommentare
Akzeptierte Antwort
Guillaume
am 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 Kommentare
Weitere Antworten (1)
Pawel Jastrzebski
am 2 Jan. 2018
Bearbeitet: Pawel Jastrzebski
am 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 Kommentare
Birdman
am 2 Jan. 2018
What is the best way to do this preferably without using loops?
Do not use loop.
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!