Vektorisierter Ein- und Ausgang

8

Ich habe mich gefragt, ob es eine vektorisierte Möglichkeit gibt, folgendes zurückzugeben:

Ich habe einen Vektor =

%Vor%

Ich möchte einen Vektor der gleichen Länge zurück erhalten, so dass, wenn er über 5 gekreuzt wird, er auf 1 (WAHR) setzen wird, bis er unter 0 fällt (FALSCH). Ich mache gerade eine for-Schleife, die ewig dauern wird, sollte die obige Reihe eine große Anzahl von Beobachtungen haben.

Antwort sollte zurückgeben:

%Vor%

Irgendwelche Ideen?

    
user1234440 26.09.2013, 02:24
quelle

6 Antworten

6

Mit dem Paket zoo können Sie Folgendes verwenden:

%Vor%     
Ferdinand.kraft 26.09.2013 03:03
quelle
4

Das ist ziemlich hässlich, aber es scheint für ziemlich komplizierte Szenarien zu funktionieren:

%Vor%

Um zu zeigen, dass es funktioniert:

%Vor%

Und mit einem komplexeren Beispiel von x :

%Vor%

    
thelatemail 26.09.2013 04:32
quelle
4

Sie können die Änderungspunkte anhand logischer Werte identifizieren und nach den Änderungen dieses Status suchen:

%Vor%

Dann können wir eine Funktion zum Plotten machen:

%Vor%

Wenn Sie dies jetzt tun, verwenden Sie die komplexeren Daten, die vorgeschlagen wurden:

%Vor%

Sie bekommen das, wo die schwarzen Punkte die Daten sind und das Rot der Zustand ist (d. h. "geschaltet" oder nicht)

Und wenn alles, was Sie wollen, die Ergebnisse sind, verwenden Sie:

%Vor%     
Andy Clifton 26.09.2013 02:41
quelle
2

UPDATE: Bearbeitet, getestet, & amp; Benchmarks hinzugefügt.

(Entschuldigung, ich konnte gestern nicht testen)

Hier ist eine Lösung, die im Wesentlichen reine logische Vergleiche ist und 20% schneller als zoo

ist %Vor%

Benchmarks:

%Vor%

Größeres x:

%Vor%

Hinweis: Wenn nicht ganzzahlige Werte erwartet werden (oder im Allgemeinen das Fehlen der exakten Randnummern, zB 0 & amp; 5 ), verwenden Sie stattdessen die folgenden Definitionen

%Vor%     
Ricardo Saporta 26.09.2013 03:06
quelle
1

Das ist wirklich ein langer Kommentar ... Es fällt mir auf, dass dies ein Schmidt Trigger (Opamp) ist. Das führt mich zu der Frage, ob es eine Möglichkeit gibt, eine while -Schleife mit einer rücksetzbaren Bedingung auszuführen.

%Vor%

Ich habe wahrscheinlich ein paar negative Zeichen dort, aber Sie bekommen die Idee.

    
Carl Witthoft 26.09.2013 11:34
quelle
0

Sie können rle() verwenden und das Schreiben für / while-Schleifen vermeiden:

%Vor%

Beachten Sie, dass dies zu einem Fehler führt, wenn der erste Wert zwischen 0 und 5 liegt, aber das Hinzufügen eines Checks ist einfach. Sie müssen auch entscheiden, welches Verhalten Sie in diesem Fall wünschen.

    
wch 26.09.2013 16:24
quelle

Tags und Links