Finding a noninteger value from an array
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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?
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (2)
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
0 Kommentare
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
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
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.
Siehe auch
Kategorien
Mehr zu Elementary Math finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!