Migliora l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni corsa, per far funzionare il JSL più velocemente senza schiacciare il PC.Attualmente ho una grande tabella per eseguire un adattamento polinomiale.
1. L'obiettivo: generare parametri di adattamento polinomiale ed esportarli come tabella.
2. Il problema: utilizzando JSL sotto, ci vuole troppo tempo per eseguire l'intera tabella. quindi posso solo suddividere la tabella in piccoli gruppi da eseguire per evitare lo schiacciamento del PC.
3. Il motivo: la tabella sottostante deve prima adattare la curva polinomiale, quindi generare la tabella di riepilogo, infine esportare tutte le classi in 1 tabella.
Supponendo che ci siano 100.000 classi, ci vorrà molto tempo per adattarsi alla curva polinomiale, quindi esportare nella tabella.
4. Aiuto necessario: qualcuno può aiutarmi a modificare il JSL? Fai in modo che si adatti a ciascuna classe con curva polinomiale, quindi esporta in tabella, quindi chiudi la finestra della curva polinomiale. Questo salverà il SDRAM DDR per continuare a eseguire tutte le 100.000 classi sommando solo esportando una tabella di 100.000 classi, senza generare una finestra di grafici di 100.000.
Grazie per l'aiuto.
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: Migliorare l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.Ed ecco il mio tentativo di Parallel Assign.Sto ancora imparando come funziona.
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: Migliorare l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.Un paio di altri metodi se non ti interessano le trame effettive.A volte vedo rallentamenti solo per rendere una grande quantità di trame.
1. Calcolalo senza la piattaforma.
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. invece di tracciare un gruppo di grafici con una variabile per variabile, potresti tracciare un grafico con un gruppo per variabile (a volte ho avuto questo aiuto).
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
Group By(:age),
Fit Polynomial( 2 ),
invisible
);
report(biv)["Parameter Estimates"][TableBox(1)] << Make Combined Data Table
E <Re: Migliorare l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.
Grazie mille, questa è una soluzione migliore della mia originale.
Aggiungo un ciclo For per suddividere la tabella grande in una piccola e utilizzare il tuo script per risolvere il mio problema.
Re: Migliora l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.Prova questo codice per iniziare con:
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
Quindi aggiungi il codice per modificare la tabella dei dati in base alle tue esigenze.
Re: Migliorare l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.Grazie per la risposta.
Puoi aiutare a modificare in base al jsl sopra?
Non è chiaro come fare...
Re: Migliorare l'efficienza di JSL: come chiudere la finestra del grafico dopo ogni esecuzione, per far funzionare JSL più velocemente senza schiacciare il PC.Non è necessario scorrere su ogni classe. Inviare << Crea tabella di dati combinati alla casella della tabella nel primo schema delle stime dei parametri.