convert a double array to something like logical
    9 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Hello. I want to concert every
1-> 1 0 0 0 0 0 0
2-> 0 1 0 0 0 0 0
3-> 0 0 1 0 0 0 0
4-> 0 0 0 1 0 0 0
5-> 0 0 0 0 1 0 0
6-> 0 0 0 0 0 1 0
7-> 0 0 0 0 0 0 1
example: I have a vector A=[1;5;7;4]; I want it to be S= [
                                      1 0 0 0 0 0 0
                                      0 0 0 0 1 0 0
                                      0 0 0 0 0 0 1
                                      0 0 0 1 0 0 0];
Is it possible to do this without for loop? Thanks
0 comentarios
Respuestas (3)
  Azzi Abdelmalek
      
      
 el 15 de Oct. de 2013
        
      Editada: Azzi Abdelmalek
      
      
 el 15 de Oct. de 2013
  
      A=[1;5;7;4];
B=zeros(numel(A),max(A))
B(sub2ind(size(B),(1:numel(A))',A))=1
0 comentarios
  Vivek Selvam
    
 el 15 de Oct. de 2013
        
      Editada: Vivek Selvam
    
 el 21 de Oct. de 2013
  
      Hi Theodor,
You can try a look-up table like this:
lut = logical(diag(ones(1,7)));
A   = [1 5 7 4]';
S   = lut(A(:),:);
0 comentarios
  hayim
 el 13 de En. de 2014
        Late to the party, but how about this?
A = [1 5 7 4]';
S = bsxfun(@eq,A,1:7)
ans =
     1     0     0     0     0     0     0
     0     0     0     0     1     0     0
     0     0     0     0     0     0     1
     0     0     0     1     0     0     0
bsxfun is your friend!
0 comentarios
Ver también
Categorías
				Más información sobre Data Type Identification 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!