Schnellere Methode zum Lesen / Schreiben einer ZelleHallo
Ich habe eine große Datendatei (250.000 Zeilen zu 2.000 Spalten), die Produktionsdaten von elektronischen ICs (Integrated Circuit Devices) enthält.
Und ich habe ein jsl-Skript, das ich zur Auswertung der Ergebnisse und zur Suche nach Mustern in den Daten verwende. In solch einer großen Datentabelle dauert es jedoch Stunden, bis ein Lauf abgeschlossen ist.
Lesen / Schreiben einer Zelle, die ich verwendet habe dt: MeasureX [Zeile] aber diese Anweisung scheint nicht effizient zu sein, also habe ich zu gewechselt Spalte (dt, "MeasureX") [intRow] und diese ist um 20% schneller auszuführen.
Gibt es Tricks, um die Ausführungszeit zu verbessern? wie das Stoppen der Tabellenfensteraktualisierung, während das Skript ausgeführt wird ...
Vielen Dank
Re: Schnellere Methode zum Lesen / Schreiben einer Zelle @oscarmforero .
Da sind Ihre Daten numerisch. Es wird wesentlich schneller sein, die meisten Ihrer Aktionen in einer Matrix auszuführen.
dt = Current Data Table();
Mat = dt << Get As Matrix; // fetches all numeric data as a matrix
Sobald Sie die Matrix haben, können Sie loc () zur Auswahl anhand logischer Bedingungen verwenden. Hier ist ein detaillierteres Beispiel:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Get as Matrix
Mat = dt << Get as Matrix; // Note Matrix will only be 3 columns
// Selecting data in data table
SR = dt << Select Where(:height <= 65) << Get Selected Rows;
dt[SR,"height"] = 65;
dt << Clear Select;
// Selecting data in matrix
SR1 = Loc(Mat[0,2] <= 65);
Mat[SR1,2] = 65;
Re: Schnellere Methode zum Lesen / Schreiben einer ZelleHallo Mark
Zum Beispiel habe ich den folgenden Code (der Code, der länger dauert, um ausgeführt zu werden), wo ich Schleifen verwende, um Zellen zu lesen und ihre Werte mit ihren Spezifikationsgrenzen zu vergleichen. Wenn der Zellenwert außerhalb der Grenzen liegt, lesen und überschreiben Sie den Wert verschiedener Zellen.
numDataColumns = Current Data Table() << get column names( Numeric );
main_table = Current Data Table();<BR />
//Loop all columns with parametric data
For( intCol = 1, intCol <= N Items( numDataColumns ), intCol++,
Spec_Lims = Column( numDataColumns[intCol] ) << Get Property( "Spec Limits" );
Spec_USL_num = Try( Spec_Lims["USL"], . );
Spec_LSL_num = Try( Spec_Lims["LSL"], . );
USL_exist = Is Missing( Spec_USL_num ) == 0;
LSL_exist = Is Missing( Spec_LSL_num ) == 0;
//Loop all the selected rows (fails) and count the number of parametric fails and executed tests.
For( intRow = 1, intRow <= N Rows( Data Table( main_table ) ), intRow++,
If( Selected( Row State( Data Table( main_table ), intRow ) ) > 0,
If( Is Missing( Column( main_table, numDataColumns[intCol] )[intRow] ) == 0, //Only check for cells with data
//If both spec limits are available
If(
(USL_exist == 1 & LSL_exist == 1) & (Column( main_table, numDataColumns[intCol] )[intRow] > Spec_USL_num |
Column( main_table, numDataColumns[intCol] )[intRow] < Spec_LSL_num),
Column( main_table, "parFailCount" )[intRow] = Column( main_table, "parFailCount" )[intRow] + 1;<BR /> //log names of failing tests
Column( main_table, "failListNames" )[intRow] = Column( main_table, "failListNames" )[intRow] || Char( numDataColumns[intCol] )
|| ",";
);
//Considered only as executed tests when any of the limits are available.
If( USL_exist == 1 | LSL_exist == 1,
Column( main_table, "parExecutedTests" )[intRow] = Column( main_table, "parExecutedTests" )[intRow] + 1
);
)
)
);
);Re: Schnellere Methode zum Lesen / Schreiben einer ZelleEs gibt viele Ansätze, um die Leistung eines Skripts zu verbessern, aber die Methode hängt von den Aktionen im Skript ab. Kannst du beschreiben, was das Skript macht " werten Sie die Ergebnisse aus und suchen Sie nach Mustern in den Daten ?