高效的行状态编码您好,我正在尝试找出在 JSL 中更改行状态的最快方法。 我通常会尝试避免选择行,因为它比 get rows where() 慢,但我不知道如何使用矩阵或行列表来更改行状态。 是否需要选择行来更改状态?
轻微相关的问题:调色板是否可以编写脚本? 我看到“colorbox()”显示框,但脚本索引表示它只能由平台访问。 我不一定需要它,因为我能够找到一些解决方法。 我的意思的示例如下所示。
谢谢,
麦克风
//Clear Log();
Names Default To Here( 1 );
dt = open( "$SAMPLE_DATA\Big Class.jmp");
//get rows where; not sure what to do with this
myRows = dt << get rows where(:height == 63);
// use select where works but could be slower
dt << select where(:height == 63);
dt << exclude(1);
dt << colors("Red");调色板,来自用户偏好的示例:

回复:高效的行状态编码是的,我经常会忘记这一点,并且在查看 JMP 的在线帮助时会不时得到提醒。我可能只是使用“select where()”,然后获取“rows where()”,以方便处理排除的行并快速(编码方面,而不是执行方面)抓取高于/低于规范限制的行我想我可以得到一个包含 1 和 0 的 excepted() 单独的列矩阵,然后相乘。 只要它正确处理缺失值,它可能会正常工作并运行得很快。
回复:高效的行状态编码我也在半导体行业工作,发现在许多大型应用程序中,将参数数据移入矩阵并使用各种矩阵函数而不是处理数据表函数是一种更快的方法。
回复:高效的行状态编码谢谢吉姆。 在 vba 和 jsl 中多年的缓慢脚本结果之后,选择“获取”而不是“选择”的习惯有点根深蒂固,但我想我主要考虑的是我不仅需要迭代行而且还需要迭代每一列的情况。
以下是有关半导体测试数据的几个场景,其中每一行都是在生产中测试的设备,每一列(索引列之后)都是设备上的参数测试。 每列都有存储为属性的规格限制。一个脚本循环并逐列确定产量、高侧和低侧影响等(很多其他内容,但这是不相关的)。通常,对于半导体数据,测试时会在第一次失败时停止,因此失败右侧的列可能会丢失。 如果数据测试是在失败时继续进行,那么转换为“失败时停止”可能会更好。 所以我还有一个脚本可以转换为“第一次失败时停止”数据。在这两种情况下,改用 get rows where() 与 select where() 显着缩短了脚本执行时间。 如果表不可见,则使用 select where() 可能会更快;我还没有检查过这个。
但对于行状态来说,它只是循环一次,所以现在我退一步思考一下,它可能还不错。
这是我的失败脚本的两个脚本版本的屏幕截图。 这一变化在执行时间上产生了巨大的差异。
另一个主题可能是为什么我将它解析为字符串。 我必须回去再看一遍,但几年前我发现解析为字符串要快得多,但这可能是在我仍然有 select where() 语句的时候。

回复:高效的行状态编码我没有您的调色板问题的答案,但我确实运行了快速的“选择位置”与“获取行位置”,发现差别不大
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "select where", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "get rows", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
我得到了结果:
“选择地点”;=“2:51:55”;
“获取行”; =“2:50:40”;