Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.J'ai actuellement une grande table pour exécuter un ajustement polynomial.
1. L'objectif : générer des paramètres d'ajustement polynomial et les exporter sous forme de tableau.
2. Le problème : en utilisant JSL ci-dessous, l'exécution de toute la table prend trop de temps. donc je ne peux que diviser la table en petits groupes à exécuter pour éviter l'écrasement du PC.
3. La raison : Le tableau ci-dessous doit d'abord s'adapter à la courbe polynominale, puis générer le tableau récapitulatif, enfin exporter toutes les classes dans 1 tableau.
En supposant qu'il existe 100 000 classes, il faudra beaucoup de temps pour ajuster la courbe polynominale, puis exporter vers la table.
4. Besoin d'aide : quelqu'un peut-il m'aider à modifier le JSL ? Faites-le pour s'adapter à chaque classe avec une courbe polynomiale, puis exportez vers un tableau, puis fermez la fenêtre de la courbe polynomiale. Cela permettra d'économiser le SDRAM DDR pour continuer à exécuter toutes les classes de 100 000 en ajoutant uniquement l'exportation d'une table de 100 000 classes, sans générer une fenêtre de tracés de 100 000.
Merci pour l'aide.
dt = Current Data Table();
biv = Bivariate( Y( :weight ), X( :age ), Fit Polynomial( 2, {Line Color( {47, 193, 29} )} ), By( :class ) );
rbiv = biv << report;
Summarize( groups = by( class ) ); // A list of all by-groups
n = N Items( groups );
//Create output table and fill with estimates
dtOut = New Table( "Polynominal parameters",
New Column( "class", Character ),
New Column( "T", numeric ),
New Column( "T2", numeric ),
addrows( n )
);
For( j = 1, j <= n, j++,
Estimates = rbiv[j]["Polynomial Fit Degree=2"]["Parameter Estimates"][1][3] << get as matrix;
:class[j] = groups[j];
:T[j] = Estimates[2];
:T2[j] = Estimates[3];
);
Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.Et voici ma tentative d'affectation parallèle.J'apprends encore comment ça marche.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, ages = By(:age));
::results = J(nitems(ages), 3, -1);
driver = ::results[0, 1];
age_rows = {};
for(i=1, i<=nitems(ages), i++,
insert into(age_rows, dt << Get Rows Where(:age == Num(ages[i])));
);
y = dt:height << Get Values();
x = dt:weight << Get Values();
m = mean(x);
Parallel Assign({a = ages, ar = age_rows, y = y, x = x, m = m},
driver[i] = (
rows = ar[i];
ys = y[rows];
xs = x[rows];
xs2 = xs||(xs-m)^2;
print(i, ys, xs2);
batch interactive(1);
Try({b, vb} = Least Squares Solve(ys, xs2));
batch interactive(0);
::results[i, 0] = b`
);
);
show(::results);Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.Quelques autres méthodes si vous ne vous souciez pas des parcelles réelles.Je vois parfois des ralentissements juste pour rendre une grande quantité de tracés.
1. Calculez-le sans la plate-forme.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, ages = By(:age));
dtOut = New Table( "Polynominal parameters",
New Column( "class", Character ),
New Column( "T", numeric ),
New Column( "T2", numeric ),
addrows(nitems(ages))
);
for(i=1, i<=nitems(ages), i++,
rows = dt << Get Rows Where(:age == Num(ages[i]));
y = dt:height[rows];
x = dt:weight[rows];
x2 = x||(x-ColMean(dt:weight))^2;
{b, vb} = Least Squares Solve(y, x2);
dtOut:class[i] = ages[i];
dtOut:T[i] = b[2];
dtOut:T2[i] = b[3];
);
2. au lieu de tracer un tas de graphiques avec une variable par, vous pouvez tracer un graphique avec un groupe par variable (j'ai parfois eu cette aide).
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
Group By(:age),
Fit Polynomial( 2 ),
invisible
);
report(biv)["Parameter Estimates"][TableBox(1)] << Make Combined Data Table
Et <Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.
Merci beaucoup, c'est une meilleure solution que ma solution d'origine.
J'ajoute une boucle For pour subdiviser la grande table en petite et utiliser votre script pour résoudre mon problème.
Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.Essayez ce code pour commencer :
dt1 = Current Data Table();
// launch Bivariate with more than one By group, save list of analysis layer references
biv = dt1 << Bivariate( Y( :weight ), X( :age ), By( :sex ), Fit Polynomial( 2 ) );
// obtain first report layer reference and save
rbiv = biv[1] << Report;
// use first reference to send table box message
dt2 = rbiv["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
// process results as a data table
Ajoutez ensuite du code pour modifier la table de données en fonction de vos besoins.
Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.Merci pour la réponse.
Pouvez-vous aider à modifier en fonction du jsl ci-dessus ?
Pas clair comment faire...
Re : Améliorer l'efficacité de JSL : comment fermer la fenêtre de tracé après chaque exécution, pour que le JSL s'exécute plus rapidement sans écraser le PC.Vous n'avez pas besoin d'itérer sur chaque classe. Envoyez << Créer un tableau de données combinées à la zone de tableau dans le premier plan d'estimation des paramètres.