Python 符号插值;从y得到x

Python 符号插值;从y得到x,python,numpy,Python,Numpy,我有以下数据: x = [0, 2, 4, 8, 30] y = [1.2e-3, 3.5e-4, 5.1e-5, 1.6e-5, 2e-7] 我试着插值,从给定的x值得到y 绘制时,数据如下所示: import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(1) ax.semilogy(x, y, 'o-') plt.show() 比如说,我感兴趣的是,对于3e-5的y值,x的值是多少 我可以通过以下

我有以下数据:

x = [0, 2, 4, 8, 30]
y = [1.2e-3, 3.5e-4, 5.1e-5, 1.6e-5, 2e-7]
我试着插值,从给定的x值得到y

绘制时,数据如下所示:

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1)
ax.semilogy(x, y, 'o-')
plt.show()

比如说,我感兴趣的是,对于3e-5的y值,x的值是多少

我可以通过以下方法得到给定y的x值:

z = np.linspace(0, 30, 10000)
logy = np.log10(y)
yy = np.power(10.0, np.interp(z, x, logy))
z[np.isclose(3.5e-5, yy, atol=1e-8)]
输出:

但是,如果我更改值以获得单个匹配,我必须调整
atol
,并且还必须创建加载更多数据点以获得分辨率


有没有更简单的方法?谢谢。

假设您要查找与
y\u f
对应的
x\u f
。假设原始列表
y
中的条目严格按降序排列,而x中的条目则在增加,则会发现
y
中的第一个条目小于或等于
y\u 0
。假设它是在索引
i
处的元组,那么根据分段划分构成相关线性函数的x,y元组将是(x[i-1],y[i-1])和(x[i],y[i])。 使用直线上给定两点的公式,我们可以得到
x\u f

x_f = x[i-1] + (x[i]-x[i-1])/(y[i]-y[i-1])*(y_f-y[i-1])

假设您要查找对应于
y\u f
x\u f
。假设原始列表
y
中的条目严格按降序排列,而x中的条目则在增加,则会发现
y
中的第一个条目小于或等于
y\u 0
。假设它是在索引
i
处的元组,那么根据分段划分构成相关线性函数的x,y元组将是(x[i-1],y[i-1])和(x[i],y[i])。 使用直线上给定两点的公式,我们可以得到
x\u f

x_f = x[i-1] + (x[i]-x[i-1])/(y[i]-y[i-1])*(y_f-y[i-1])

谢谢,你能扩大你的答案吗?当你尝试这个时,你得到了什么?谢谢,你能扩展你的答案吗?试一试,你会得到什么?