找到水平线在相应的Y轴值上通过的X轴数据点

时间:2018-02-10 04:35:29

标签: python pandas numpy scipy interpolation

我在[1,2,3,4,5]上有x-axis个数据点,在y-axis上有[10,15,10,10,20]的相应值,如y-axis

通常可以通过给定x-axis个数据点找到y=f(x)的值点 就像interpolation一样,我检查了这一点,我们可以使用numpy通过12来实现这一点。但是我没有找到如何通过给定的y轴值插入x轴...每个附加的屏幕我想找到行[1, 1.x, 2, 2.x, 3, 4, 4.x, 5, 5.x]交叉的相应x轴值。
所以我期待x-axis .wit上的结果axios.post('/user', { firstName: 'Fred', lastName: 'Flintstone' }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });

enter image description here

2 个答案:

答案 0 :(得分:2)

如果是平滑曲线,您可以使用InterpolatedUnivariateSpline

import numpy as np
from scipy import interpolate

x = np.linspace(0, 20, 100)
y = np.sin(x + 0.1)

y0 = 0.3
spline = interpolate.InterpolatedUnivariateSpline(x, y - y0)

xp = spline.roots()

这是情节:

pl.plot(x, y)
pl.axhline(0.3, color="black", linestyle="dashed")
pl.vlines(xp, 0, 0.3, color="gray", linestyle="dotted")

enter image description here

如果你想要线性插值:

x = np.linspace(0, 20, 20)
y = np.sin(x + 0.1)
y0 = 0.3
y_offset = y - y0
pos = np.where((y_offset[1:] * y_offset[:-1]) <= 0)[0]

x1 = x[pos]
x2 = x[pos+1]
y1 = y[pos]
y2 = y[pos+1]

xp = (y0 - y1) / (y2 - y1) * (x2 - x1) + x1

enter image description here

答案 1 :(得分:0)

如果您更改interp1d(x,y)的{​​{1}},则表示x是y的函数。

请注意,如果f(x)不唯一,则可能会出现意外或未定义的行为。