使用 JSL 查找表你好,
我編寫了一些代碼來實現電壓/時間數據集的基本查找表。 但由於我的數據集的大小,它凍結了。
快速背景,每次運行可能有大約 1000 行(時間間隔),並且有大約 1500 次運行,因此總共 150 萬行。 簡而言之,在開始使用查找表之前,我在代碼中執行以下操作:
- 處理數據集
- 根據數據計算 dV/dt
- 使用表格查找每次運行的峰值 dV/dt,並創建一個名為 dt2 的新數據表。
- 在數據集中創建一個新列,以在每次運行中的每個 dV/dt 值旁邊寫入峰值 dV/dt 值。
此時,我的代碼開始逐行通過 dt1,交叉檢查定義針對 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]
);
當我對一個小集合進行測試時,這段代碼是有效的,但是一旦我有了完整的數據集,無限旋轉的輪子就出現了。 我對此很陌生,並且確信一定有一種更好更有效的方法來做到這一點,我只是還沒有弄清楚。
謝謝
大規模定制回复:使用 JSL 查找表謝謝指點@大衛_伯納姆,我會記得下次我發現自己使用“For Each Row”時。
回复:使用 JSL 查找表這個功能正是我一直在尋找的。 謝謝@tx尼爾森!
回复:使用 JSL 查找表看@tx尼爾森的回應,但還要注意,雖然“For Each Row”寫得很好,但我的經驗是它執行速度非常慢。標準的 for 循環,即“For (i=1,i<=nrows(dt),i++”) 是迭代表行的更快方法。
回复:使用 JSL 查找表您確實讓 JMP 很難做到這一點。處理此問題最簡單、最有效的方法是使用更新平台。它應該可以毫無問題地處理 1.5m 行的查找
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 )
);
回复:使用 JSL 查找表如果有幫助的話,請盡快,使用此代碼的原因是,我可以根據行是否屬於峰值 dV/dt 函數的某個閾值來過濾和刪除行。