Nachschlagetabellen mit JSLHallo,
Ich habe Code geschrieben, um eine rudimentäre Nachschlagetabelle für einen Spannungs-/Zeitdatensatz zu implementieren. Aber aufgrund der Größe meines Datensatzes friert er ein.
Kurzer Hintergrund: Für jeden Lauf kann es etwa 1.000 Zeilen (Zeitintervalle) geben, und es gibt etwa 1.500 Läufe, also insgesamt 1,5 Meilen. Kurz gesagt mache ich Folgendes in meinem Code, bevor ich mit der Verwendung der Nachschlagetabelle beginne:
- Prozessdatensatz
- Berechnen Sie dV/dt aus Daten
- Verwenden Sie Tabulate, um den dV/dt-Spitzenwert für jeden einzelnen Lauf zu ermitteln und eine neue Datentabelle mit dem Namen dt2 zu erstellen.
- Erstellen Sie eine neue Spalte im Datensatz, um den dV/dt-Spitzenwert in jedem Lauf neben jeden dV/dt-Wert zu schreiben.
An diesem Punkt beginnt mein Code, Zeile für Zeile durch dt1 zu gehen, die verschiedenen Testparameter, die den #-Lauf definieren, gegen dt2 zu prüfen, den Spitzenwert dV/dt zu finden und ihn in dieser Zeile in dt1 zurückzugeben.
Mein Code zum Durchsuchen der Nachschlagetabelle sieht folgendermaßen aus:
Current Data Table( dt1 );<BR /><BR />For Each Row(
v = :sample;
w = :temp;
x = :cell;
y = :vicl;
z = :v_bg;<BR />// Find the row in dt2 that matches v/w/x/y/z
row = dt2 << get rows where( :sample == v & :temp == w & :cell == x & :vicl == y & :v_bg == z);<BR />// get values from the dV/dt peak column in dt2
col = Column(dt2, "dvdt_abs_max") << getValues;<BR />// pick out the value of row[n] from that column and save into the active row in dt1
:dVdt_peak = col[row]
);
Dieser Code funktionierte, als ich ihn für einen kleinen Satz testete, aber als ich meinen vollständigen Datensatz hatte, erschien das unendliche, sich drehende Rad. Ich bin ziemlich neu in diesem Bereich und bin mir sicher, dass es einen besseren und effizienteren Weg geben muss, ich habe es nur noch nicht herausgefunden.
Danke
MassenanpassungBetreff: Nachschlagetabellen mit JSLDanke für den Hinweis @David_Burnham , daran werde ich mich erinnern, wenn ich das nächste Mal „Für jede Zeile“ verwende.
Betreff: Nachschlagetabellen mit JSLDiese Funktion ist genau das, was ich gesucht habe. Danke @txnelson !
Betreff: Nachschlagetabellen mit JSLSehen @txnelson 's Antwort, aber beachten Sie auch, dass 'For Each Row' zwar schön zu schreiben ist, meiner Erfahrung nach jedoch sehr langsam ausgeführt wird.Eine Standard-for-Schleife, also „For (i=1,i<=nrows(dt),i++“, ist eine viel schnellere Methode zum Durchlaufen der Zeilen einer Tabelle.
Betreff: Nachschlagetabellen mit JSLSie zwingen JMP wirklich dazu, dies auf die harte Tour zu tun.Der einfachste und effizienteste Weg, dies zu handhaben, ist die Verwendung der Update-Plattform.Es sollte Ihre Suche in 1,5-Millionen-Zeilen ohne Probleme bewältigen
dt << Update(
With( dt2 ),
Match Columns( :sample == :sample, :temp == :temp, :cell == :cell, :vicl == :vicl, :v_bg == :v_bg ),
Add Columns from Update Table( :dvdt_abs_max )
);
Betreff: Nachschlagetabellen mit JSLNur schnell, wenn es hilft: Der Grund für diesen Code ist, dass ich Zeilen basierend darauf filtern und löschen kann, ob sie unter einen Schwellenwert fallen, der eine Funktion des Spitzenwerts dV/dt ist.