Modo più veloce di leggere / scrivere una cellaCiao
Ho un grande file di dati (250k righe per colonne 2k) che contiene dati di produzione da dispositivi elettronici (circuiti integrati).
E ho uno script jsl che uso per valutare i risultati e cercare pattern nei dati, ma in una tabella di dati così grande ci vogliono ore per completare una corsa.
Per leggere / scrivere una cella che stavo usando dt: Measurex [Row] ma quella istruzione sembra non essere efficiente, quindi sono passato a Colonna (dt, "MeasureX") [intRow] e questo è il 20% più veloce da eseguire.
Ci sono trucchi per migliorare i tempi di esecuzione? come fermare l'aggiornamento della finestra della tabella mentre lo script è in esecuzione ...
Grazie
Re: modo più veloce di leggere / scrivere una cella @oscarmforero ,
Poiché i tuoi dati sono numerici. Sarà molto più veloce cercare di eseguire la maggior parte delle tue azioni su una matrice.
dt = Current Data Table();
Mat = dt << Get As Matrix; // fetches all numeric data as a matrix
Una volta ottenuta la matrice, è possibile utilizzare loc () per la selezione in base a condizioni logiche. Ecco un esempio più dettagliato:
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: modo più veloce di leggere / scrivere una cellaCiao Mark
Ad esempio, ho il codice sottostante (che è quello che impiega più tempo per eseguire) dove utilizzo i loop per leggere le celle e per confrontare i loro valori contro i loro limiti delle specifiche. Se il valore della cella non rientra nei limiti, leggere e sovrascrivere il valore di celle diverse.
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: modo più veloce di leggere / scrivere una cellaEsistono molti approcci per migliorare le prestazioni di uno script ma il metodo dipende dalle azioni nello script. Puoi descrivere ciò che lo script fa per " valutare i risultati e cercare modelli nei dati ?"