2016-09-14 3 views
0

Ich habe eine matrix <1x5000> mit dem Namen values. Was ich tue, ist nun zu prüfen, ob bestimmte Werte in dieser Matrix vorhanden, wie folgt aus:Prüfen, ob die Reihenfolge der Zahlen in der Matrix der vordefinierten Zahlenfolge entspricht

if any(values == 10) && any(values == 45) && any(values == 55) and so on 
plot graph here 
end 

Was dies tun zu prüfen ist, ob die Zahlen 10, 45, 55 irgendwo in dieser Matrix existieren. Jetzt Ich möchte diese Aussage ändern, um stattdessen nach Zahlen zu suchen, die in einer vordefinierten Reihenfolge hintereinander kommen, mit anderen Worten, nicht nur prüfen, ob sie existieren. Beispiel:

Hilfe wäre sehr dankbar, da ich neu bei Matlab bin.

Habe bisher versucht:

values = [10, 50, 30, 60, 40]; 

[~, indices] = ismember([10, 50, 30, 60, 40], values); 

if all(indices > 0) && issorted(indices) 
    % Do stuff 
end 

ohne Erfolg, ist die if-Anweisung nie zufrieden.

Also um es klarer zu machen, wenn ich Werte = [10, 20, 50, 25, 33] setzen; Da müssen irgendwo in der Matrix Werte aufeinander folgen, genau so wie ich es gesetzt habe. Beispiel: Matrix: 10, 55, 90, 33, 10, 20, 50, 25, 33, 100, 59 würde ergeben, da es eine Sequenz von 10, 20, 50, 25, 33

+0

Was ist, wenn andere Zahlen in der Sequenz "10, 25, 35, 55, 60" vorhanden sind? Ein Beispiel wäre "10, 100, 25, 200, 35, 300, 55, 400, 60, 500"; würde dies als Erfüllung Ihrer Bedingung von "Zahlen, die in einer vordefinierten Reihenfolge hintereinander kommen", zählen? Ein konkretes Beispiel mit erwarteten Ergebnissen wäre nett. – edwinksl

+0

Was ist, wenn es Wiederholungen dieser Zahlen gibt und einige Kombinationen die Reihenfolge unterbrechen, während andere genügen, '10, 100, 25, 10, 200, 35, 300, 55, 400, 60, 500': diese Reihenfolge erfüllt Ihre Bestellung, wenn Sie betrachte nur die erste "10". –

+0

@edwinksl Das würde meine Bedingung nicht erfüllen, keine anderen Werte dürfen dazwischen liegen. – HumbleMan

Antwort

3

Wenn Sie wollen Um festzustellen, ob eine genaue Reihe von Werten in Ihrem Array erscheint, können Sie strfind verwenden. Obwohl die Funktion für Strings erstellt wurde, funktioniert sie auch für numerische Datentypen. Wenn im Array ein Sub-Array vorhanden ist, ist die Ausgabe von strfind der Index der Vorkommen, andernfalls, wenn das Sub-Array nicht existiert, ist die Ausgabe ein leeres Array [].

if ~isempty(strfind(values, [10 25 35 55 60])) 
    % Do stuff 
end 
+0

Vielen Dank für Ihre Antwort. Leider funktioniert das nicht für mich. Ich habe es mit Werten = [10, 20, 50, 25, 33] eingerichtet; aber die if-Anweisung wird niemals ausgeführt. Habe auch mit anderen Werten versucht, ohne Erfolg. Ich denke, Sie haben meine Frage falsch verstanden, ich möchte nicht überprüfen, ob der nächste Wert größer ist, aber es kommt in Ordnung. – HumbleMan

+0

Also um es klarer zu machen, wenn ich Werte = [10, 20, 50, 25, 33] setze; Da müssen irgendwo in der Matrix Werte aufeinander folgen, genau so wie ich es gesetzt habe. Beispiel: Matrix: 10, 55, 90, 33, 10, 20, 50, 25, 33, 100, 59 würde ergeben, wie es eine Sequenz von 10, 20, 50, 25, 33 gibt. – HumbleMan

+0

@HumbleMan Ok es warn Klar, dass du so eine exakte Kopie brauchst. Ich habe meine Antwort aktualisiert. – Suever

Verwandte Themen