Filter löschen
Filter löschen

Finding a noninteger value from an array

10 Ansichten (letzte 30 Tage)
SAZZAD HOSSAIN
SAZZAD HOSSAIN am 20 Dez. 2012
Kommentiert: Matthew Murphy am 6 Jul. 2016
I have an array which looks like:
x = linspace(0,1,101);
To find the index of the maximum point from an array, I can write:
[val,ind] = max(x);
However, I need the index of a particular point, let's say 0.70. How should i write the commands to find this?
My second question is that I have a specific value y = 0.703. I need to do my calculation using the array x, but I have to start from the value in x that is closest to y. Which means I am looking for the index of the point 0.70 in x, but i need to express it in terms of y in my code. How can I do that?

Akzeptierte Antwort

Matt J
Matt J am 20 Dez. 2012
Both questions have the same answer
[~,loc]=min(abs(x-y))

Weitere Antworten (2)

Kye Taylor
Kye Taylor am 20 Dez. 2012
Bearbeitet: Kye Taylor am 20 Dez. 2012
To do (1) and (2) try
y = 0.7; % or y = 0.73;
[~,idx] = min(abs(x-y));
% idx contains the index of the value in x closest to y

Matthew Murphy
Matthew Murphy am 6 Jul. 2016
Given the array x, you could also use the find command.
find(x == .7) --> ans = 71
For the second part, you could try a slightly different way with the same command.
Given some plus/minus window of .01, you could do this:
find(x < .703 + .01 & x > .703 - .01 ) --> ans = 71 72
Now, there are multiple values, so you could use a while loop with smaller and smaller margins until one value is found (with a catch to widen the margin if no values are found).
[I know this is an old post, but I still wanted to follow up with an approach that worked for me.]
  2 Kommentare
Matt J
Matt J am 6 Jul. 2016
Bearbeitet: Matt J am 6 Jul. 2016
Using find() without floating point tolerances can be hit or miss, for example,
>> x=0:0.3:1
x =
0 0.3000 0.6000 0.9000
>> find(x==(1-.7))
ans =
Empty matrix: 1-by-0
That is why I recommended the use of min() for both scenarios raised by the OP,
>> [~,loc]=min(abs(x-(1-.7)))
loc =
2
Matthew Murphy
Matthew Murphy am 6 Jul. 2016
I think my version would work if you had the explicit value (eg .3) used in find.
x=0:0.3:1
x =
0 0.3000 0.6000 0.9000
find(x == .3)
ans =
2
You are definitely right with the tolerance issue, no problem there. In my application, I had points to search for, so I had exact values.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by