The FIND command returns an empty matrix for a number I know exists

64 visualizaciones (últimos 30 días)
Dharmesh Nadhe
Dharmesh Nadhe el 28 de En. de 2011
Comentada: Image Analyst el 16 de Abr. de 2018
I have sets of data in column vector form (around 70000 elements).
To find the maximum element I used "max(x)" and the value comes to around 0.0305.
I want to know the indices of this element (number of the max value element). I am using find command as
find(x==0.0305)
But I get answer as
"Empty matrix: 0-by-1".
It works when I use
find(x<0.0305)
and displays all indices with value less than 0.0305. Can someone explain what I am doing wrong?
  1 comentario
Sanjay
Sanjay el 22 de Oct. de 2013
I have a similar related problem. Above given question speaks about a unique problem where the indices of the maximum element has to be find. I have a data series contained in 'am1' with sample rate of 100 sps. The time 't' is of 359.79 secs so in total i have 35979 data points.
In my code I am using
trScl = find(t ==183.5); trScu = find(t ==213.5); where these index point have to be used to create a new time series
Sc=am1(trScl:trScu);
there is no error but output comes with an empty matrix likewise; trScl [] trScu []
Now if instead of above mentioned values I use trScl = find(t ==80); trScu = find(t ==98);
the code works providing me with the correct answer. i.e t <= 100 it works,!!!
Kindly help me on this subject

Iniciar sesión para comentar.

Respuestas (5)

Doug Eastman
Doug Eastman el 28 de En. de 2011
The issue here is that the value is not exactly 0.0305, it gets truncated when displayed in the command window. You need to save the maximum value in a variable and then use that variable to find the indices:
myMax = max(x);
i = find(x==myMax);
  1 comentario
Jiro Doke
Jiro Doke el 28 de En. de 2011
I recommend this answer. By saving the actual max value, you will get the full precision. Using the
[C,I] = max(...)
syntax for a vector will only give you the index of the first occurrence, not all occurrences.

Iniciar sesión para comentar.


Oleg Komarov
Oleg Komarov el 28 de En. de 2011
Look at second output:
[C,I] = max(...)
Oleg
  1 comentario
Michelle Hirsch
Michelle Hirsch el 28 de En. de 2011
I recommend this answer - it gets right to the desired solution, with no worries about numeric precision.

Iniciar sesión para comentar.


Todd Flanagan
Todd Flanagan el 28 de En. de 2011
You are bumping into issues with floating point accuracy. Loren has a nice blog post about accuracy with floating point numbers.
You can get the result directly from the MAX command using the form that returns both the numerical and index results:
[C, I] = max(x);
Note that with [C,I] = max(...) if there are several identical maximum values, the index of the first one found is returned.
If you want to use find or need to use find because you expect more than 1 occurrence of the maximum, you'll need to take some approach that either brackets the number you are looking for or programatically gives you the exact floating point representation you are looking for.
For example:
a = [1 2 3 .3501/10 4];
myMin = min(a)
find(a == myMin)
or for other sorts of problems you may want to bracket like:
find(a<.0351 & a>.0350)

Image Analyst
Image Analyst el 22 de Oct. de 2013
  2 comentarios
Sanjay
Sanjay el 9 de Dic. de 2013
Editada: Sanjay el 9 de Dic. de 2013
THANK YOU, Someway it was helpful but still the problem is not yet solved. !!!
Image Analyst
Image Analyst el 9 de Dic. de 2013
I see. Dharmesh has not accepted any of the suggested answers, so perhaps he does not consider it solved. He should accept one or ask a follow up question. If Sanjay has a question, he should start his own discussion in a separate thread.

Iniciar sesión para comentar.


omar kammouh
omar kammouh el 15 de Abr. de 2018
I had the same problem. I solved it by simply copying and then pasting the column (or the matrix) from which I am trying to find the index of a value.
  1 comentario
Image Analyst
Image Analyst el 16 de Abr. de 2018
The function you should use now to compare floating point numbers is called ismembertol().

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by