Manière plus rapide de lire / écrire une celluleBonjour
J'ai un gros fichier de données (250k lignes par 2k colonnes) qui contient des données de production provenant de circuits électroniques (IC).
Et j’ai un script jsl que j’utilise pour évaluer les résultats et rechercher des modèles dans les données, mais dans un tableau de données aussi volumineux, il faut des heures pour effectuer une analyse.
Pour lire / écrire une cellule que j'utilisais dt: MeasureX [Row] mais cette instruction semble ne pas être efficace d'exécution, alors je suis passé à Colonne (dt, "MeasureX") [intRow] et celui-ci est 20% plus rapide à exécuter.
Existe-t-il des astuces pour améliorer le temps d'exécution? comme arrêter la régénération de la fenêtre de la table pendant l'exécution du script ...
Merci
Re: moyen plus rapide de lire / écrire une cellule @oscarmforero ,
Puisque vos données sont numériques. Il sera nettement plus rapide d’essayer d’effectuer la plupart de vos actions sur une matrice.
dt = Current Data Table();
Mat = dt << Get As Matrix; // fetches all numeric data as a matrix
Une fois que vous avez la matrice, vous pouvez utiliser la loc () pour la sélection basée sur des conditions logiques. Voici un exemple plus détaillé:
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: moyen plus rapide de lire / écrire une celluleSalut Mark
Par exemple, j'ai le morceau de code ci-dessous (qui est celui qui prend le plus de temps à exécuter) où j'utilise des boucles pour lire des cellules et comparer leurs valeurs par rapport à leurs limites de spécifications. Si la valeur de la cellule est en dehors des limites, lisez et écrasez la valeur de différentes cellules.
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: moyen plus rapide de lire / écrire une celluleIl existe de nombreuses approches pour améliorer les performances d'un script, mais la méthode dépend des actions du script. Pouvez-vous décrire ce que le script fait pour " évaluer les résultats et rechercher des tendances dans les données ? "