Betrachten Sie das folgende Beispiel, in dem x
Finding Start- und Zielindizes positive Kurven in Daten
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
, die so etwas wie dies in der Handlung aussieht:
Nun, was ich will find ist der Anfangs- und Endindex jeder positiven Kurve in der Grafik und speichert sie in einer Matrix. Der Code, den ich unten geschrieben habe, funktioniert gut, aber ich nenne ihn nicht elegant. Hat jemand einen besseren und effizienteren Weg?
zero_padding = zeros(1,2);
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
x = [x zero_padding]
stp(1) = find(x>0 , 1, 'first')
enp(1) = find(x(stp(1):end)==0 , 1, 'first') - 1
stoffset = enp(1);
i = 2
while(~isempty(find(x(stoffset + 1:end)>0 , 1, 'first')))
stp(i) = find(x(stoffset + 1:end)>0 , 1, 'first') + stoffset
enp(i) = find(x(stp(i) + 1:end) == 0 , 1, 'first') + stp(i) - 1
stoffset = (enp(i)) + 1;
i = i + 1;
end
und der Ausgang ist:
>> stp =
1 22 43 65
>> enp =
10 31 52 75
, die korrekt ist.
HINWEIS: Ich habe mit bereits versucht:
startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
, die gut funktionieren würden, wenn die positiven Kurven einfach perfekt Plätze waren aber, wie Sie in den Stellplätzen sehen können, hat es viele Dips. Es ist also schwierig, es zu verwenden, da diff
bei diesen Einbrüchen auch +1 oder -1 ergibt.
Blick auf 'diff (data> 0)', sollen Sie in der Lage sein, von dort, wenn zur Arbeit (Hinweis zurückkehrt '1' wenn deine 'positiven Kurven' beginnen und' -1' wo sie enden) – Dan
@Dan Ich habe diesen Ansatz bereits ausprobiert, das Problem taucht auf, wenn es viele Dips in den positiven Kurven gibt, wie du im x-Plot'diff siehst (Daten> 0) 'wird uns auch Indizes dieser Änderungen geben – Umar
nein wird es nicht, es sei denn, dass diese sinkt gehe unter die '0'-Linie, in diesem Fall musst du klarer definieren, was du mit positiven Kurven meinst. Sobald Sie '0 'auf' Daten 'angewendet haben, werden alle diese Dips verschwinden – Dan