Mejore la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.Actualmente tengo una tabla grande para ejecutar un ajuste polinomial.
1. El objetivo: generar parámetros de ajuste polinomial y exportarlos como una tabla.
2. El problema: al usar JSL a continuación, lleva demasiado tiempo ejecutar toda la tabla. así que solo puedo subdividir la tabla en pequeños grupos para ejecutar y evitar el aplastamiento de la PC.
3. La razón: la siguiente tabla debe ajustarse primero a la curva polinomial, luego generar la tabla de resumen, finalmente exportar todas las clases a 1 tabla.
Suponiendo que hay 100k clases, llevará mucho tiempo ajustar la curva polinómica y luego exportarla a la tabla.
4. Ayuda necesaria: ¿Puede alguien ayudarme a modificar el JSL? Hágalo para que se ajuste a cada clase con curva polinomial, luego exporte a la tabla, luego cierre la ventana de curva polinomial. Esto salvará el DDR SDRAM para seguir ejecutando todas las clases de 100k sumando solo exportando una tabla de clases de 100k, sin generar una ventana de gráficos de 100k.
Gracias por la ayuda.
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: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.Y aquí está mi intento de asignación paralela.Todavía estoy aprendiendo cómo funciona.
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: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.Un par de otros métodos si no te importan las tramas reales.A veces veo ralentizaciones solo para renderizar una gran cantidad de gráficos.
1. Calcularlo sin la plataforma.
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. En lugar de trazar un montón de gráficos con una variable, podría trazar un gráfico con un grupo por variable (a veces he tenido esta ayuda).
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
Group By(:age),
Fit Polynomial( 2 ),
invisible
);
report(biv)["Parameter Estimates"][TableBox(1)] << Make Combined Data Table
Y <Re: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.
Muchas gracias, esta es una solución mejor que la original.
Agrego un ciclo For para subdividir la tabla grande en una pequeña y uso su script para resolver mi problema.
Re: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.Pruebe este código para comenzar 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
A continuación, agregue código para modificar la tabla de datos según sus necesidades.
Re: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.Gracias por la respuesta.
¿Puedes ayudar a modificar según el jsl anterior?
No tengo claro cómo hacerlo...
Re: Mejorar la eficiencia de JSL: cómo cerrar la ventana de trazado después de cada ejecución, para que JSL se ejecute más rápido sin aplastar la PC.No es necesario iterar sobre cada clase. Envíe << Hacer tabla de datos combinados al cuadro de tabla en el primer esquema de Estimaciones de parámetros.