JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、実行のたびにプロットウィンドウを閉じる方法。私は現在、多項式フィットを実行するための大きなテーブルを持っています。
1.目標:多項式フィットパラメーターを生成し、それをテーブルとしてエクスポートします。
2.問題:以下のJSLを使用すると、テーブル全体を実行するのに時間がかかりすぎます。そのため、PCのクラッシュを回避するために、テーブルを小さなグループにサブセット化して実行することしかできません。
3.理由:以下の表は、最初に多項式曲線に適合し、次に要約表を生成し、最後にすべてのクラスを1つの表にエクスポートする必要があります。
10万のクラスがあると仮定すると、多項式曲線を近似してからテーブルにエクスポートするのに長い時間がかかります。
4.必要なヘルプ:誰かがJSLを変更するのを手伝ってくれますか? 多項式曲線を使用して各クラスに適合させてから、テーブルにエクスポートしてから、多項式曲線ウィンドウを閉じます。 これにより、 DDR SDRAM 100kのプロットウィンドウを生成せずに、100kクラスのテーブルをエクスポートするだけで、すべての100kクラスを実行し続けることができます。
助けてくれてありがとう。
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:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。そして、これがParallelAssignでの私の試みです。私はまだそれがどのように機能するかを学んでいます。
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:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。実際のプロットを気にしない場合は、他のいくつかの方法があります。大量のプロットをレンダリングするためだけに速度が低下することがあります。
1.プラットフォームなしで計算します。
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. by変数を使用して一連のグラフをプロットする代わりに、group by変数を使用して1つのグラフをプロットすることができます(私は時々この助けを借りました)。
biv = dt << Bivariate(
Y( :height ),
X( :weight ),
Group By(:age),
Fit Polynomial( 2 ),
invisible
);
report(biv)["Parameter Estimates"][TableBox(1)] << Make Combined Data Table
そして<<プラットフォームでは見えないことがほとんどの場合役に立ちます。
Re:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。どうもありがとう、これは私の元の解決策よりも優れた解決策です。
Forループを追加して、大きなテーブルを小さなテーブルにサブセット化し、スクリプトを使用して問題を解決します。
Re:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。最初にこのコードを試してください:
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
次に、ニーズに合わせてデータテーブルを変更するコードを追加します。
Re:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。返信いただきありがとうございます。
上記のjslに基づいて変更するのを手伝ってもらえますか?
それを行う方法が明確ではありません...
Re:JSLの効率を改善する:PCをクラッシュさせることなく、JSLをより高速に実行するために、各実行後にプロットウィンドウを閉じる方法。すべてのクラスを繰り返す必要はありません。 << Make CombinedDataTableを最初のParameterEstimatesアウトラインのテーブルボックスに送信します。