convert a double array to something like logical
    9 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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 Kommentare
Antworten (3)
  Azzi Abdelmalek
      
      
 am 15 Okt. 2013
        
      Bearbeitet: Azzi Abdelmalek
      
      
 am 15 Okt. 2013
  
      A=[1;5;7;4];
B=zeros(numel(A),max(A))
B(sub2ind(size(B),(1:numel(A))',A))=1
0 Kommentare
  Vivek Selvam
    
 am 15 Okt. 2013
        
      Bearbeitet: Vivek Selvam
    
 am 21 Okt. 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 Kommentare
  hayim
 am 13 Jan. 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 Kommentare
Siehe auch
Kategorien
				Mehr zu Data Type Identification 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!



