Python 查找水平线在相应Y轴值上穿过的X轴数据点

Python 查找水平线在相应Y轴值上穿过的X轴数据点,python,pandas,numpy,scipy,interpolation,Python,Pandas,Numpy,Scipy,Interpolation,我在x轴上有一个[1,2,3,4,5]数据点,在y轴上有其各自的值,如[10,15,10,10,20] 通常通过给定的x轴数据点查找y轴的值点 像y=f(x)一样,我检查了这个,我们可以通过插值使用numpy来实现。。但我没有发现如何通过给定的y轴值来插值x轴。。根据所附的屏幕,我希望找到线12交叉处的相应x轴值。因此我希望得到类似[1,1.x,2,2.x,3,4,4.x,5,5.x]的结果x轴上的 如果您更改interp1d(x,y)为interp1d(y,x)则表示x为y的函数 请注意,如果

我在
x轴上有一个
[1,2,3,4,5]
数据点,在
y轴上有其各自的值,如
[10,15,10,10,20]


通常通过给定的
x轴
数据点查找
y轴
的值点 像
y=f(x)
一样,我检查了这个,我们可以通过
插值
使用
numpy
来实现。。但我没有发现如何通过给定的y轴值来插值x轴。。根据所附的屏幕,我希望找到线
12
交叉处的相应x轴值。
因此我希望得到类似
[1,1.x,2,2.x,3,4,4.x,5,5.x]的结果
x轴上的


如果您更改
interp1d(x,y)
interp1d(y,x)
则表示x为y的函数


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

如果是平滑曲线,则可以使用
插值单变量样条线

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

如果要进行线性插值:

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
x=np.linspace(0,20,20)
y=np.sin(x+0.1)
y0=0.3
y_偏移=y-y0
pos=np.其中((y_偏移量[1:]*y_偏移量[:-1])