JSLを使用したルックアップテーブルこんにちは、
電圧/時間データセットの基本的なルックアップ テーブルを実装するコードをいくつか書きました。 しかし、データセットのサイズが大きいため、フリーズしてしまいます。
簡単な背景として、各実行には約 1,000 行 (時間間隔) があり、実行数は約 1,500 であるため、合計で 1.5 メートルの行になります。 簡単に言うと、ルックアップ テーブルの使用を開始する前に、コード内で次のことを行っています。
- プロセスデータセット
- データから dV/dt を計算
- tabulate を使用して、個々の実行ごとのピーク dV/dt を見つけ、dt2 という新しいデータ テーブルを作成します。
- データセットに新しい列を作成して、各実行の各 dV/dt 値の隣にピーク dV/dt 値を書き込みます。
この時点で、私のコードは dt1 を 1 行ずつ実行し始め、 # dt2 に対する実行を定義するさまざまなテスト パラメーターをクロスチェックし、ピーク dV/dt を見つけて dt1 のその行に返します。
ルックアップテーブルを検索するためのコードは次のようになります。
Current Data Table( dt1 );<BR /><BR />For Each Row(
v = :sample;
w = :temp;
x = :cell;
y = :vicl;
z = :v_bg;<BR />// Find the row in dt2 that matches v/w/x/y/z
row = dt2 << get rows where( :sample == v & :temp == w & :cell == x & :vicl == y & :v_bg == z);<BR />// get values from the dV/dt peak column in dt2
col = Column(dt2, "dvdt_abs_max") << getValues;<BR />// pick out the value of row[n] from that column and save into the active row in dt1
:dVdt_peak = col[row]
);
このコードは、小規模なセットでテストしたときは機能しましたが、完全なデータセットを取得すると、無限の回転ホイールが表示されました。 私はこれについてはかなり初心者で、これを行うためのより良い、より効率的な方法があるに違いないと確信していますが、それがわかりません。
ありがとう
マスカスタマイゼーションRe: JSL を使用したルックアップテーブルご指摘ありがとうございます@David_Burnham , 次回「For Each Row」を使用することになったときは、そのことを覚えておきます。
Re: JSL を使用したルックアップテーブルこの機能はまさに私が探していたものです。 ありがとう@txnelson !
Re: JSL を使用したルックアップテーブル見る@txnelsonの応答ですが、「For Each Row」は書くのには良いのですが、私の経験では実行が非常に遅いことにも注意してください。標準の for ループ、つまり 'For (i=1,i<=nrows(dt),i++') は、テーブルの行を反復処理するためのより高速な方法です。
Re: JSL を使用したルックアップテーブルあなたは本当に JMP にこれを難しい方法でやらせています。これに対処する最も簡単かつ効率的な方法は、更新プラットフォームを使用することです。150万行のルックアップを問題なく処理できるはずです
dt << Update(
With( dt2 ),
Match Columns( :sample == :sample, :temp == :temp, :cell == :cell, :vicl == :vicl, :v_bg == :v_bg ),
Add Columns from Update Table( :dvdt_abs_max )
);
Re: JSL を使用したルックアップテーブル役に立ちましたら簡単に説明します。このコードの理由は、ピーク dV/dt の関数であるしきい値を下回るかどうかに基づいて行をフィルタリングして削除できるようにするためです。