Find Command not working.
Afficher commentaires plus anciens
Hi everyone . I have a matrix with first row as T=[NaN 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]. When I use the command now if i have a=0.6 and i try to find index of 'a' as V=find(T==a). it gives me an answer as :
How to solve this ?
Réponses (3)
use abs(difference) to comapare the float numbers.
T=[NaN 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9];
a=0.6;
V=find(abs(T-a)<1e-10)
1 commentaire
Muhammad Owais
le 24 Oct 2021
Image Analyst
le 24 Oct 2021
0 votes
It's probably not exactly 0.6. Try ismembertol().
T = [NaN 0.1:0.1:0.9]
a = 0.3;
Visually, it looks like 0.3 is in T
find(T == a)
But find() says it is not there.
Is it there? Let's look at the bit representation
fprintf('a:\n'); arrayfun(@pX, a);
So for the literal, the bit representation ends in all hex 3's.
Is that bit representation present in T?
fprintf('\nT:\n'); arrayfun(@pX, T);
No. There is a very similar bit representation that ends in a 4 rather than a 3. The last 4 bits of the actual value are 0011 (decimal 3), but the closest that T has is something for which the last 4 bits are 0100 (decimal 4).
When you calculate something two different ways, the bits are not necessarily going to come out identical.
function pX(N)
fprintf('%016X\n', typecast(N, 'uint64'));
end
1 commentaire
Image Analyst
le 24 Oct 2021
A thorough explanation. There is also an explanation in the FAQ:
This is stuff you would have learned in your numerical analysis/linear algebra class at the university if you had taken such a class.
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!