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])
谢谢,你能扩大你的答案吗?当你尝试这个时,你得到了什么?谢谢,你能扩展你的答案吗?试一试,你会得到什么?