Convert a vector to a binary matrix

13 visualizaciones (últimos 30 días)
Utkarsh Barsaiyan
Utkarsh Barsaiyan el 2 de En. de 2018
Editada: Pawel Jastrzebski el 2 de En. de 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?

Respuesta aceptada

Guillaume
Guillaume el 2 de En. de 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

Más respuestas (1)

Pawel Jastrzebski
Pawel Jastrzebski el 2 de En. de 2018
Editada: Pawel Jastrzebski el 2 de En. de 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 comentarios
Birdman
Birdman el 2 de En. de 2018
What is the best way to do this preferably without using loops?
Do not use loop.
Utkarsh Barsaiyan
Utkarsh Barsaiyan el 2 de En. de 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.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by