Verbessern Sie die JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu zerstören.Ich habe derzeit eine große Tabelle, um eine Polynomanpassung auszuführen.
1. Das Ziel: polynomiale Anpassungsparameter generieren und als Tabelle exportieren.
2. Das Problem: Wenn Sie JSL unten verwenden, dauert es zu lange, die gesamte Tabelle auszuführen. Daher kann ich den Tisch nur in kleine Gruppen unterteilen, um einen PC-Crush zu vermeiden.
3. Der Grund: Die folgende Tabelle muss zuerst die Polynomkurve anpassen, dann die Übersichtstabelle erstellen und schließlich alle Klassen in eine Tabelle exportieren.
Angenommen, es gibt 100.000 Klassen, dauert es lange, die Polynomkurve anzupassen und dann in die Tabelle zu exportieren.
4. Hilfe benötigt: Kann mir jemand helfen, die JSL zu modifizieren? Passen Sie es für jede Klasse mit Polynomkurve an, exportieren Sie es dann in eine Tabelle und schließen Sie dann das Polynomkurvenfenster. Dies spart die DDR-SDRAM Um weiterhin alle 100.000 Klassen auszuführen, wird nur eine Tabelle mit 100.000 Klassen exportiert, ohne ein Diagrammfenster von 100.000 zu generieren.
Danke für die Hilfe.
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];
);
Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.Und hier ist mein Versuch von Parallel Assign.Ich lerne noch, wie es funktioniert.
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);Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.Ein paar andere Methoden, wenn Sie sich nicht für die eigentlichen Plots interessieren.Ich sehe manchmal Verlangsamungen, nur um eine große Anzahl von Plots zu rendern.
1. Berechnen Sie es ohne die Plattform.
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. Anstatt eine Reihe von Diagrammen mit einer By-Variable zu zeichnen, könnten Sie ein Diagramm mit einer Group-By-Variable zeichnen (ich hatte diese Hilfe manchmal).
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
Group By(:age),
Fit Polynomial( 2 ),
invisible
);
report(biv)["Parameter Estimates"][TableBox(1)] << Make Combined Data Table
Und <Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.
Vielen Dank, das ist eine bessere Lösung als meine ursprüngliche.
Ich füge eine For-Schleife hinzu, um die große Tabelle in eine kleine zu unterteilen, und verwende Ihr Skript, um mein Problem zu lösen.
Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.Versuchen Sie zunächst diesen Code:
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
Fügen Sie dann Code hinzu, um die Datentabelle an Ihre Anforderungen anzupassen.
Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.Danke für die Antwort.
Können Sie helfen, basierend auf dem obigen jsl zu ändern?
Nicht klar, wie es geht ...
Betreff: Verbesserung der JSL-Effizienz: So schließen Sie das Plot-Fenster nach jedem Lauf, damit die JSL schneller läuft, ohne den PC zu quetschen.Sie müssen nicht jede Klasse durchlaufen. Senden Sie << Kombinierte Datentabelle erstellen an das Tabellenfeld in der ersten Gliederung der Parameterschätzungen.