使用 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 函数的某个阈值来过滤和删除行。