Clear Filters
Clear Filters

Convert a vector to a binary matrix

11 views (last 30 days)
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?

Accepted Answer

Guillaume
Guillaume on 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

More Answers (1)

Pawel Jastrzebski
Pawel Jastrzebski on 2 Jan 2018
Edited: Pawel Jastrzebski on 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 Comments
Birdman
Birdman on 2 Jan 2018
What is the best way to do this preferably without using loops?
Do not use loop.
Utkarsh Barsaiyan
Utkarsh Barsaiyan on 2 Jan 2018
Yes, this is the basic thing. I am looking for an answer that does it without using loops. For eg., I create an array of zeros of the corresponding size then make all the elements corresponding to the columns in y to be 1.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!