linear interpolation between two data points

前端 未结 3 961
我寻月下人不归
我寻月下人不归 2021-01-13 02:33

I have two data points x and y:

  x = 5 (value corresponding to 95%)
  y = 17 (value corresponding to 102.5%)

No

相关标签:
3条回答
  • 2021-01-13 03:13

    is that what you want?

    In [145]: s = pd.Series([5, np.nan, 17], index=[95, 100, 102.5])
    
    In [146]: s
    Out[146]:
    95.0      5.0
    100.0     NaN
    102.5    17.0
    dtype: float64
    
    In [147]: s.interpolate(method='index')
    Out[147]:
    95.0      5.0
    100.0    13.0
    102.5    17.0
    dtype: float64
    
    0 讨论(0)
  • 2021-01-13 03:26

    We can easily plot this on a graph without Python:

    This shows us what the answer should be (13).

    But how do we calculate this? First, we find the gradient with this:

    The numbers substituted into the equation give this:

    So we know for 0.625 we increase the Y value by, we increase the X value by 1.

    We've been given that Y is 100. We know that 102.5 relates to 17. 100 - 102.5 = -2.5. -2.5 / 0.625 = -4 and then 17 + -4 = 13.

    This also works with the other numbers: 100 - 95 = 5, 5 / 0.625 = 8, 5 + 8 = 13.

    We can also go backwards using the reciprocal of the gradient (1 / m).

    We've been given that X is 13. We know that 102.5 relates to 17. 13 - 17 = -4. -4 / 0.625 = -2.5 and then 102.5 + -2.5 = 100.

    How do we do this in python?

    def findXPoint(xa,xb,ya,yb,yc):
        m = (xa - xb) / (ya - yb)
        xc = (yc - yb) * m + xb
        return
    

    And to find a Y point given the X point:

    def findYPoint(xa,xb,ya,yb,xc):
        m = (ya - yb) / (xa - xb)
        yc = (xc - xb) * m + yb
        return yc
    

    This function will also extrapolate from the data points.

    0 讨论(0)
  • 2021-01-13 03:31

    You can use numpy.interp function to interpolate a value

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = [95, 102.5]
    y = [5, 17]
    
    x_new = 100
    
    y_new = np.interp(x_new, x, y)
    print(y_new)
    # 13.0
    
    plt.plot(x, y, "og-", x_new, y_new, "or");
    

    0 讨论(0)
提交回复
热议问题