Convert a vector to a binary matrix

조회 수: 6 (최근 30일)
Utkarsh Barsaiyan
Utkarsh Barsaiyan 2018년 1월 2일
편집: Pawel Jastrzebski 2018년 1월 2일
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?

채택된 답변

Guillaume
Guillaume 2018년 1월 2일
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

추가 답변 (1개)

Pawel Jastrzebski
Pawel Jastrzebski 2018년 1월 2일
편집: Pawel Jastrzebski 2018년 1월 2일
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
Birdman
Birdman 2018년 1월 2일
What is the best way to do this preferably without using loops?
Do not use loop.
Utkarsh Barsaiyan
Utkarsh Barsaiyan 2018년 1월 2일
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.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by