## Find the index of given value in an array

### Mirlan Karimov (view profile)

on 10 Apr 2019
Latest activity Commented on by Adam

on 12 Apr 2019

### Stephen Cobeldick (view profile)

array = [ 1 2 3 4 5 6 ];
find(array == 3);
This is clear!
I want to find fractional index when array == 2.5 or any other intermediate value.

Stephen Cobeldick

### Stephen Cobeldick (view profile)

on 10 Apr 2019
What exactly is a "fractional index" ?

on 10 Apr 2019

### Stephen Cobeldick (view profile)

on 11 Apr 2019
Edited by Stephen Cobeldick

### Stephen Cobeldick (view profile)

on 11 Apr 2019

Much simpler (and also works for multiple val values):
interp1(array,1:numel(array),val)
For example:
>> array = [2,4,5,7,8,9]; % a more interesting sequence.
>> val = 3.8;
>> interp1(array,1:numel(array),val)
ans = 1.9
And compared to the (very complex) accepted answer:
>> idxAboveVal = find( array >= val, 1 );
>> idxFract = idxAboveVal - ( array( idxAboveVal ) - val ) / ( array( idxAboveVal ) - array( idxAboveVal - 1 ) )
idxFract = 1.9

#### 1 Comment

on 12 Apr 2019
Yeah, I was originally going to give an answer based on interp1 but had a brainfade on working out how to use it for this!

on 10 Apr 2019

on 10 Apr 2019

val = 2.5;
idxAboveVal = find( array >= val, 1 );
idxFract = idxAboveVal - ( array( idxAboveVal ) - val ) / ( array( idxAboveVal ) - array( idxAboveVal - 1 ) );
I'm guessing this is what you mean.
Obviously it would need error checking if idxAboveVal is 1 or empty.
There's probably neater ways to do it too, or shorter, at least!

Mirlan Karimov

### Mirlan Karimov (view profile)

on 10 Apr 2019
Thank you for your answer. This is a manual approach and probably would cause bugs in my case cuz the original code I am running is much more complicated in a numerical sense. Therefore I am looking for find() type function that would do the job.

on 11 Apr 2019
The find function simply finds integer indices into an array that correspond to the logical expression you give it. It isn't magic. It can't find things that don't exist. Hence I used it to find the next value greater than the one you want and did the required maths from there.
You should always give an example that shows the full complexity of the question you are asking though if you want a useful answer.
Giving what people call a 'Minimum working example' is fine, but it needs to have the full complexity of what you actually want to know still, otherwise it's of no use.
A manual approach to things causes bugs if you get it wrong, not if you get it right.
Mirlan Karimov

### Mirlan Karimov (view profile)

on 11 Apr 2019
I had a manual code but then realized yours is shorter and I will be using that one. Thanks!