linear interpolation between two data points

人走茶凉 提交于 2020-01-02 07:11:15

问题


I have two data points x and y:

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

No I would like to calculate the value for xi which should correspond to 100%.

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

How should I do this using python?


回答1:


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



回答2:


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.




回答3:


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");



来源:https://stackoverflow.com/questions/38282659/linear-interpolation-between-two-data-points

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!