我有一个巨大的值数组,所有的值都小于1,所以使用向上/向下取整函数是无用的。有没有什么办法可以在这些非整数值上使用/生成'find‘函数?
例如:
ind=find(x,9.5201e-007)FWIW所有值在数组中都是按递增顺序排列的。
非常感谢!
发布于 2012-06-19 22:21:23
您使用的语法不正确。
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-19 22:33:52
当我想要在某个容差范围内找到实数时,我通常会将它们都舍入到该容差级别,然后进行查找、排序等操作。
如果x是我的真实数字,我会这样做
xr = 0.01 * round(x/0.01);那么xr都是.01的倍数,即四舍五入到最近的.01。然后我就可以做
t = find(xr=9.22) 然后x(t)将是x的每个值,介于9.2144444444449和9.225之间。
发布于 2012-06-20 13:41:46
从你的评论来看你想要的是
`[b,m,n] = unique(x,'first');那么b将是x中没有重复的元素的排序版本,并且
x = b(n);因此,如果n中有4个‘1’,这意味着值b(1)在x中出现了4次,而它在x中的位置是find(n==1)。
https://stackoverflow.com/questions/11102862
复制相似问题