Manera más rápida de leer / escribir una celdaHola
Tengo un archivo de datos grandes (250k filas por 2k columnas) que contiene datos de producción de dispositivos de circuitos integrados electrónicos (IC).
Y tengo una secuencia de comandos jsl que utilizo para evaluar los resultados y buscar patrones en los datos, pero en una tabla de datos tan grande toma horas completar una ejecución.
Para leer / escribir una celda que estaba usando dt: MeasureX [Fila] pero esa instrucción parece no ser eficiente en la ejecución, así que cambié a Columna (dt, "MeasureX") [intRow] y este es un 20% más rápido de ejecutar.
¿Hay trucos para mejorar el tiempo de ejecución? como detener la actualización de la ventana de la tabla mientras el script se está ejecutando ...
Gracias
Re: forma más rápida de leer / escribir una celda @oscarmforero ,
Dado que sus datos son numéricos. Será mucho más rápido intentar realizar la mayoría de sus acciones en una matriz.
dt = Current Data Table();
Mat = dt << Get As Matrix; // fetches all numeric data as a matrix
Una vez que tenga la matriz, puede usar el botón loc () para la selección basada en condiciones lógicas. Aquí hay un ejemplo más detallado:
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: forma más rápida de leer / escribir una celdaHola, Mark
Por ejemplo, tengo el siguiente fragmento de código (que es el que tarda más en ejecutarse) donde uso los bucles para leer celdas y comparar sus valores contra sus límites de especificaciones. Si el valor de la celda está fuera de los límites, lea y sobrescriba el valor de diferentes celdas.
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: forma más rápida de leer / escribir una celdaExisten muchos enfoques para mejorar el rendimiento de un script, pero el método depende de las acciones en el script. ¿Puedes describir lo que hace el script para " Evaluar los resultados y buscar patrones en los datos. ? "