Search code examples
pythonarraysindicesinterpolation

Interpolation without specifying indices in Python


I have two arrays of the same length, say array x and array y. I want to find the value of y corresponding to x=0.56. This is not a value present in array x. I would like python to find by itself the closest value larger than 0.56 (and its corresponding y value) and the closest value smaller than 0.56 (and its corresponding y value). Then simply interpolate to find the value of y when x 0.56.

This is easily done when I find the indices of the two x values and corresponding y values by myself and input them into Python (see following bit of code). But is there any way for python to find the indices by itself?

#interpolation:
def effective_height(h1,h2,g1,g2):
    return (h1 + (((0.56-g1)/(g2-g1))*(h2-h1)))

eff_alt1 = effective_height(x[12],x[13],y[12],y[13])

In this bit of code, I had to find the indices [12] and [13] corresponding to the closest smaller value to 0.56 and the closest larger value to 0.56.

Now I am looking for a similar technique where I would just tell python to interpolate between the two values of x for x=0.56 and print the corresponding value of y when x=0.56.

I have looked at scipy's interpolate but don't think it would help in this case, although further clarification on how I can use it in my case would be helpful too.


Solution

  • Does Numpy interp do what you want?:

    import numpy as np
    x = [0,1,2]
    y = [2,3,4]
    np.interp(0.56, x, y)
    Out[81]: 2.56