2016-07-14 12 views
1

Ich habe mehrere matrices <1x1000> enthält ganze Zahlen wie:Drucken ganzen Zahlen in einer Matrix, um ohne Duplikate kommen

matrix = [0,0,0,0,0,30,30,30,40,40,50,50,50,40,0,0,0,30,30,30] 

möchte ich drucken (disp und später plot) sie wie folgt aus: 30,40,50 , 40,30. Im Grunde ignorieren Sie die Duplikate, wenn sie aufeinander folgen.

Ein weiteres Beispiel:

matrix = [0,0,0,0,10,10,10,10,50,50,50,50,10,10,10,50,50] folgende Angaben: 10,50,10,50

Hilfe wird sehr geschätzt!

+1

Bitte geben Sie ein kleines Beispiel für Ihre tatsächlichen Matrixdaten mit der tatsächlichen MATLAB-Syntax e, g, Matrix = [0,0,0,0,30,30,30,40] oder Matrix = {[0, 0,0,30,30,40,40], [0,0,30,30,30,40,30,0,0,0,0]} usw. – Dan

+0

Wie ist die Absicht bei etwas wie "[10 0 10 20] '? Es kann zwei Lösungen geben: '[10 20]' und '[10 10 20]' – serial

+0

Soll [10 10 20] sein –

Antwort

2
Result = 0; 
% loop over all nonzero values in matrix 
for Element = matrix 
    if Element == Result(end) 
     % skip if equal 
     continue 
    else 
     % add new value 
     Result(end+1) = Element; 
    end 
end 
% discard zero entries 
Result = Result(Result ~= 0); 
+0

Dumm Frage, aber wie drucke ich es? disp (Ergebnis)? –

+0

@ J.Smith Typ 'Ergebnis' ohne'; ' – Thanushan

+0

@ J.Smith' disp (sprintf ('% u \ t \ t', Ergebnis)) 'auch eine Möglichkeit – serial

0

Hiermit kann der Ausgangsmatrix rufen um dann

um(1) = matrix(1); 
j = 1; 
for i=2: length(matrix) 
    % Ignore repeating numbers 
    if (um(j) ~= matrix(i)) 
    j = j + 1; 
    um(j) = matrix(i); 
    end 
end 

% Remove zeros 
um = um(um~=0); 
3

verwenden:

[~,c]=find([NaN diff(matrix)]); 
output=matrix(c); 
output = output(output~=0) 

und die Ausgabe zu planen, verwenden Sie einfach: plot(output)

+0

@serial Danke für den Hinweis darauf. Der Bug ist jetzt behoben! –

1

Alle bisher angebotenen Lösungen Verwenden Sie entweder Schleifen oder die Funktion find, die ar Das ist ineffizient. Matrix Indexierungs Verwenden Sie einfach:

[matrix((matrix(1:end-1)-matrix(2:end))~=0), matrix(end)] 

ans = 

0 30 40 50 40  0  30 

Durch die Art und Weise in Ihrem Beispiel sind discarting Sie die 0 s, auch wenn sie in wiederholten Sequenzen kommen?

Verwandte Themen