2016-12-01 4 views
2

, also versuche ich zu wissen, wann ein Ereignis vor einem anderen Ereignis in Matlab passiert ist; nach Ereignis meine ich Nummer. Zum Beispiel habe ich einen Vektor, sagen wir mal:Suchen Sie eine Nummer vor einer anderen spezifischen Nummer auf einem Vektor

x = [0,3 0,3 0,1 0,2 0,5 0,1 0,3 0,1 0,5 0,1 0,4 0,5]

und ich möchte wissen, in welcher Position die 0,1 ist, bevor ein geschah 0.5. habe ich mit find (x, 0,5, 'last') versucht aber das hilft nicht viel, da ich dann den 0.1 finden will. Ich dachte darüber nach, vielleicht einen anderen Vektor zu erstellen, der bei 0,5 endete und dann nach den letzten 0,1 suchte, aber das wäre einfach ineffizient, da meine Vektoren ~ 300 Ereignisse enthielten.

+0

Can Sie zeigen uns in Ihrem Beispiel die gewünschte Ausgabe? Welche der Positionen mit 0.1 willst du finden? – beaker

+0

Die gewünschte Ausgabe wäre Y = [3 8 10]; zum Beispiel würde der Wert 0,1 in Position 6 nicht gemeldet werden, da es einen weiteren Wert 0,1 in Position 8 vor dem Wert 0,5 in Position 9 gibt. –

Antwort

2

Sie können dies versuchen, wenn Sie wollen 0,5 sofort angezeigt werden, nachdem .1

idx = [x(1:end-1)==0.1 & x(2:end)== 0.5 false] 

, die einen logischen Index, für numerischen Index erzeugt können Sie

find(idx) 

Update verwenden: zu finden alle .1 s, die 0,5 nach ihnen haben, ohne dass irgendjemand 0,1 hat, erscheinen zwischen diesen .1 und .5

f= find(x==.1 | x==.5) 
f(x(f(1:end-1)) < x(f(2:end))) 
+0

Das Testen von Gleitkommawerten auf Gleichheit verlangt nur nach Ärger. – beaker

+1

Sind Sie sicher, dass das der OP vorschwebte? Dies funktioniert nur, wenn der 0,5-Wert ist * sofort * nach 0,1 – beaker

+1

OP ist verantwortlich für das Testen Gleitkomma :) – rahnema1

Verwandte Themen