考虑以下工作流程:
A = [2/3 exp(1) 5];
match = interp1(A, A, 2, 'next');第二个命令查找A的值,该值在2之后。因此,match等于exp(1)。
我有两个问题:
A == match总是计算为[0 1 0]吗?B = [exp(1) exp(1) exp(1)],B == match的结果是什么?如果exp(1)被其他非理性或超验数所取代,答案会改变吗?
发布于 2016-05-05 02:15:56
interp1中下一个邻居插值的实现只是复制数据。虽然这在当前版本中可能是正确的,但这肯定是可以更改的。如果在将来,interp1被重写为执行一些下邻居插值的浮点算法,那么您的比较就会意外地失败。因此,即使在这种情况下,我也不愿意使用==进行比较。exp(1)示例,可以预期内置的exp函数将执行相同的操作顺序,因此,对于相同(相同)的输入,输出值都将具有相同的精度错误。正因为如此,您的比较将产生[1 1 1]。
再一次,这是一个关于内置函数的内部结构的假设,最终可能会回来咬你。对于这种比较,我将避免使用==,只是为了确保您的代码函数按照预期的方式运行,而不管函数的内部实现如何。更新
我可能不会像您展示的那样进行比较,试图识别下一个邻居的位置,而只是做下面的操作,以获得相同的结果。
ind = find(A > 2);或者如果你真的需要一个逻辑数组。
[0 diff(A > 2) == 1]或者,您可以在A中找到与匹配最接近的值,如下所示:
[~, ind] = min(abs(A - match))更新2
在注释中提供的示例
C = [exp(1) exp(1) exp(1) 1 1 pi*4 pi*4 pi*4 pi*4];
C == mode(C);您正在进行(合理的)假设,即mode返回被发现为该模式的值的确切副本。尽管在上面的比较中,问题在于您还假设输入数组中的所有pi*4都是完全相等的。因此,基本上,如果mode返回一个确切的副本,则比较C == mode(C)将至少返回1次匹配,但可能返回多达4次匹配,这取决于所有4*pi条目的“相等”程度。
https://stackoverflow.com/questions/37041084
复制相似问题