2016-05-06 17 views
1

Wenn ich einen Vektor habe, sagen wir L = [10; 10; 10; 11; 11; 13; 13], die zu einem anderen Vektor X = [1; 6; 65; 34; 21; 73; 14] und ich möchte einen dritten Vektor Z mit fast allen Elementen in X erzeugen, aber nur eine 0 in X ersetzen, wenn sich das Element (i, j) von L ändert. Sagen wir, dass das Ergebnis, das ich will, so aussehen sollte Z = [1; 6; 65; 0; 21; 0; 14]MATLAB ersetzt einige Elemente aus einem Vektor

Irgendwelche Ideen, wie man das löst?

Ich wäre wirklich dankbar :)

Antwort

1

Das ist einfach:

X = [1;6;65;34;21;73;14]; 
L = [10;10;10;11;11;13;13]; 
Z = X; 
ind = [false; diff(L)~=0]; %// logical index of values to be set to 0 
Z(ind) = 0; 

Dies funktioniert, indem eine logical indexind = [false; diff(L)~=0] der Elemente Berechnung, wo eine Änderung aufgetreten ist. Die erste false wird benötigt, weil das erste Element kein vorheriges zum Vergleich hat. Der logische Index wird verwendet, um auszuwählen, welche Werte von Z auf 0 gesetzt werden sollen.

+0

Arbeit, die perfekt war, dank Luis! – angelavtc

0

Dies sollte

Z = zeros(length(L)) 

for i = 2:length(L) 
    if(L(i-1) == L(i) 
     Z(i) = X(i); 
    else 
     Z(i) = 0; 
    end 
end 
Verwandte Themen