SciPy 中的插值:找到产生 Y 的 X
有没有更好的方法来找到哪个X给了我在SciPy中寻找的Y? 我刚刚开始使用SciPy,对每个函数都不是太熟悉。
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = [70, 80, 90, 100, 110]
y = [49.7, 80.6, 122.5, 153.8, 163.0]
tck = interpolate.splrep(x,y,s=0)
xnew = np.arange(70,111,1)
ynew = interpolate.splev(xnew,tck,der=0)
plt.plot(x,y,'x',xnew,ynew)
plt.show()
t,c,k=tck
yToFind = 140
print interpolate.sproot((t,c-yToFind,k)) #Lowers the spline at the abscissa
Is there a better way to find which X gives me the Y I am looking for in SciPy? I just began using SciPy and I am not too familiar with each function.
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = [70, 80, 90, 100, 110]
y = [49.7, 80.6, 122.5, 153.8, 163.0]
tck = interpolate.splrep(x,y,s=0)
xnew = np.arange(70,111,1)
ynew = interpolate.splev(xnew,tck,der=0)
plt.plot(x,y,'x',xnew,ynew)
plt.show()
t,c,k=tck
yToFind = 140
print interpolate.sproot((t,c-yToFind,k)) #Lowers the spline at the abscissa
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您需要的只是线性插值,您可以使用 interp 函数。
If all you need is linear interpolation, you could use the interp function in numpy.
我可能误解了你的问题,如果是的话我很抱歉。 我认为你不需要使用 SciPy。 NumPy 具有最小二乘函数。
这将返回 [128.81280358 -143.16202286 61.96032544]。
0.04出,还不错
I may have misunderstood your question, if so I'm sorry. I don't think you need to use SciPy. NumPy has a least squares function.
This will return [ 128.81280358 -143.16202286 61.96032544].
0.04 out, not bad
scipy 中的 UnivariateSpline 类使样条曲线变得更加Python化。
要在 y 处找到 x,请执行以下操作:
我认为根据 y 对 x 进行插值可能会起作用,但它采用了稍微不同的路线。 分数越多,可能会更接近。
The UnivariateSpline class in scipy makes doing splines much more pythonic.
To find x at y then do:
I thought interpolating x in terms of y might work but it takes a somewhat different route. It might be closer with more points.