在非整数MATLAB数组值上使用find

时间:2012-06-19 14:13:14

标签: matlab floating-point comparison

我有一大堆值,全部或小于1,所以使用向上/向下舍入功能是没用的。无论如何我可以在这些非整数值上使用/ make'find'函数吗?

e.g。

ind=find(x,9.5201e-007)

FWIW所有值都在数组中以连续的顺序排列。

非常感谢!

3 个答案:

答案 0 :(得分:2)

您使用的语法不正确。

find(X,k)

返回k非零值,这就是k必须是整数的原因。你想要

find(x==9.5021e-007);
%#   ______________<-- logical index: ones where condition is true, else zeros
%#   the single-argument of find returns all non-zero elements, which happens
%#   at the locations of your value of interest.

请注意,这需要是浮点数的精确表示,否则将失败。如果您需要容差,请尝试以下示例:

tol = 1e-9; %# or some other value
val = 9.5021e-007;
find(abs(x-val)<tol);

答案 1 :(得分:0)

当我想在一定范围内找到实数时,我通常将它们全部舍入到那个容忍度,然后做我的发现,排序,等等。

如果x是我的真实数字,我会做类似

的事情
xr = 0.01 * round(x/0.01);

然后xr都是.01的倍数,即四舍五入到最接近的.01。然后我可以做

t = find(xr=9.22) 

然后x(t)将是x在9.2144444444449和9.225之间的每个值。

答案 2 :(得分:0)

从你的评论中听起来你想要的是

`[b,m,n] = unique(x,'first');

然后b将是x中元素的排序版本,没有重复,

x = b(n);

因此,如果n中有4个1',则表示值b(1)x中显示4次​​,其在x中的位置位于{{ 1}}。