データテーブルを反復処理する最も簡単な方法こんにちは、
数百万行(画像データ)のJMPテーブルがあり、それぞれの操作にはコストと時間がかかります。しかし、他の列から計算される新しい列を追加する必要があります。
大規模なデータセットでこれを行う最も速い方法は何でしょうか?現在、列に「数式の設定」を使用していますが、適用に時間がかかり、さらに分析中に数式が何度も変更される可能性があります。「値を取得」ベクターなどを使用するべきでしょうか?「各行」機能も見たことがあります。ご意見やヒントがあれば、ぜひお聞かせください。自動化とスクリプト基本的なデータ分析とモデリングRe: データテーブルを反復処理する最も簡単な方法多くの場合、従来の行単位のJSLではなく行列演算を使用すると、処理速度が向上します。ただし、実際に使用している数式の例を示していただけると助かります。
Re: データテーブルを反復処理する最も簡単な方法こんにちは、
ご返答ありがとうございます。
もう少し詳しく説明します。以下は、私が使用している数式の例を含むスクリプトです。画像のX/Y座標に基づいて、画像をゾーンに分割します。実際の日付では合計20個のゾーンです。ゾーンの分類が正しくない場合は、数式を修正します。そのため、集合数式を頻繁に使用するとしています。
dt = New Table( "Reprex",
Add Rows( 1000000 ),
New Column( "X", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) ),
New Column( "Y", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) )
);
R_debut_X = 10;
largeur = 50;
ecart_X = 5;
debut_Y = 20;
hauteur = 30;
ecart_Y = 5;
// Slow way: row formula
dt << New Column( "Zone_slow", Character,
Formula(
If( R_debut_X < :X <= R_debut_X + largeur & debut_Y < :Y <= debut_Y + hauteur, "Zone 1",
R_debut_X + largeur + ecart_X < :X <= R_debut_X + 2*largeur + ecart_X & debut_Y < :Y <= debut_Y + hauteur, "Zone 2",
"Other"
)
)
);
Re: データテーブルを反復処理する最も簡単な方法@txnelson さんの言うとおり、行列を使うと速度が向上するかもしれません。<
dt = New Table( "Reprex",
Add Rows( 1000000 ),
New Column( "X", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) ),
New Column( "Y", Numeric, Continuous, Formula( Random Integer( 0, 200 ) ) )
);
R_debut_X = 10;
largeur = 50;
ecart_X = 5;
debut_Y = 20;
hauteur = 30;
ecart_Y = 5;
start = hptime();
// Slow way: row formula
dt << New Column( "Zone_slow", Character,
Formula(
If( R_debut_X < :X <= R_debut_X + largeur & debut_Y < :Y <= debut_Y + hauteur, "Zone 1",
R_debut_X + largeur + ecart_X < :X <= R_debut_X + 2*largeur + ecart_X & debut_Y < :Y <= debut_Y + hauteur, "Zone 2",
"Other"
)
)
);
dt<
<RUNFORMULAS></RUNFORMULAS>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Craige_Hales_0-1758807317326.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/83489iE50BBC18E746B0D5/Craige_Hales_0-1758807317326.png" role="button" title="Craige_Hales_0-1758807317326.png" alt="Craige_Hales_0-1758807317326.png" /></span></SPAN></SPAN></P> <BR /> <P>結果値は、cmatxy1,2 の真理値 0 または 1 を使用して、other、zone1、zone2 の 0、1、または 2 の値を構築します。それが重要であれば、行列ステートメントの一部を折り畳んでさらに高速化することもできます。</P> <BR />
Re: データテーブルを反復処理する最も簡単な方法本当にありがとうございます。今はずっと速くなりました!