2016-04-10 13 views
1

Zum Beispiel Ich habe eine binäre Array mit der Größe von 9 als b = [0 1 0 1 0 1 1 1 1], Dann ein weiteres Array 'm' mit der Größe 7 als m = [21 28 36 45 45 66 66]. Hier möchte ich alle Nullen von 'b' durch das erste Element von m ändern und dann die 1en von b durch aufeinanderfolgende Elemente von 'm' ersetzen, so dass meine Ausgabe-1D-Anordnung wie folgt aussehen sollte: [21 28 21 36 21 45 45 66 66] . Unten ist mein Code, ich weiß wirklich nicht, wo ich Fehler mir hätte bitte helfen, diesenWie verschachtelte oder doppelte for-Schleife in Matlab zu verwenden, um neue 1D-Array durch den Vergleich bestehenden 1D-Array

b= [0 1 0 1 0 1 1 1 1]; 
b=b(:); 
m = [21 28 36 45 45 66 66]; 
m = m(:); 
k=zeros(size(b)); 
for i=1:length(b) 
    for j=2:length(m) 
     if b(i)==0 
     k(i)=m(1); 
     else 
      k(i)=m(j); 
     end 
    end 
end 

sind immer Ausgang als k = [66 21 66 21 21 66 66 66 66] zu lösen

Antwort

2

verwenden sie logische Indizierung statt - es ist viel schneller und besser lesbar:

b = [0 1 0 1 0 1 1 1 1]; 
m = [21 28 36 45 45 66 66]; 

k = zeros(size(b)); 
k(b==0) = m(1);    % fill values where b=0 with m(1) 
k(b==1) = m(2:sum(b)+1); % fill values where b=1 with consecutive m values 

Ergebnis:

>> k 
k = 
    21 28 21 36 21 45 45 66 66 
Verwandte Themen