<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich versuche herauszufinden, ob es eine schnellere Möglichkeit gibt, eine Liste basierend auf Teilübereinstimmungen zu filtern.Siehe den Code unten. Dies gilt übrigens für JMP 12, vor allen Listenverbesserungen.
Namen werden standardmäßig hier angezeigt ( 1 );
dt = Neuer Tisch ( "Prüfen" ,
Neue Spalte ( „SomeList“ , Werte festlegen( 1 :: 100000 )),
Privat
);
lista = Spalte (dt, „SomeList“ ) << Datentyp (Charakter) << Werte abrufen ;
schließen (dt, kein Speichern);
filter_by_partial_match = Funktion ({Liste, Wert},
dt = Neuer Tisch ( "Schneller?" ,
Neue Spalte ( „Funlist“ , Zeichen, Werte festlegen(Liste)),
Neue Spalte ( „Bool“ , Formel( Enthält ( Kleinbuchstaben (:funlist), Kleinbuchstaben (Wert) )) ),
Privat
);
bools = loc ( Spalte (dt, „Bool“ )<< Werte abrufen );
filtered_list = :funlist[bools];
schließen (dt, kein Speichern);
gefilterte_Liste;
);
start_time = HPTime ();
filtered_list = filter_by_partial_match(lista, „2“ );
t_time = HPTime () - Startzeit;
zeigen (t_time, nitems(filtered_list));
Kennt jemand einen besseren Weg?
Ich glaube, dass die Datentabelle den Vorteil des Multithreadings (Spaltenformeln usw.) genießt. Daher wäre ich überrascht, wenn es in JMP 12 eine schnellere Möglichkeit gäbe, dies zu tun.
Ja, es wäre auf jeden Fall mit einem Mehraufwand verbunden, die gesamte Liste in Kleinbuchstaben zu schreiben.Sie könnten den Wert zumindest kleinschreiben.Aber auch hier ist der Leistungsgewinn nicht groß.
Wie schreibt man die gesamte Liste in Kleinbuchstaben?Würden die Kosten dafür nicht den Nutzen, den Sie daraus ziehen, überwiegen?
Ja, ich liebe die Verbesserung um 13 Listen. Aber leider muss ich für den Kunden 12 verwenden.Ich liebe es, ihnen zu sagen, sie sollen auf 13 gehen, aber es ist wahrscheinlich ein vergeblicher Versuch.
Haben Sie es schon in Version 13 ausprobiert? Hier sind meine Ergebnisse mit dem Private-Table-Ansatz:
t_time = 115828;
N Elemente(filtered_list) = 40951;
Hier sind die Ergebnisse mit einer Schleife:
t_time = 61895;
N Elemente(filtered_list) = 40951;
Im Gegensatz dazu habe ich in Version 12 Folgendes erhalten:
t_time = 127356;
N Elemente(filtered_list) = 40951;
t_time = 161896168;
N Elemente(filtered_list) = 40951;
Ich erhalte eine leichte Verbesserung, wenn ich die Kleinbuchstabenfunktion aus der Spaltenformel entferne und stattdessen eine Kleinbuchstabenliste einsende und den Wert auf Kleinbuchstaben festlege.Ansonsten sieht das ziemlich schnell aus.
Das ist schnell! Schleifen- oder Regex-Ansätze würden nicht einmal in die Nähe kommen (ich habe es versucht und bin gescheitert ...).