0

我有大量的值,全部或远小于 1,因此使用向上/向下舍入函数是无用的。无论如何我可以在这些非整数值上使用/制作“查找”功能吗?

例如

ind=find(x,9.5201e-007)

FWIW 所有值都在数组中按顺序排列。

非常感激!

4

3 回答 3

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);
于 2012-06-19T14:21:23.093 回答
0

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

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

thenb将是 x 中元素的排序版本,没有重复,并且

x = b(n);

因此,如果 中有 4 个 '1' n,则表示该值b(1)出现了x4 次,并且它在x中的位置find(n==1)

于 2012-06-20T05:41:46.470 回答
0

当我想在某个容差范围内找到实数时,我通常会将它们全部四舍五入到该容差水平,然后进行查找、排序等。

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

xr = 0.01 * round(x/0.01);

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

t = find(xr=9.22) 

然后x(t)将是x9.2144444444449 和 9.225 之间的每个值。

于 2012-06-19T14:33:51.810 回答