我有两个长度相同的数组,比如数组x和数组y。我想找到对应于x = 0.56的y的值。这不是数组x中存在的值。 我希望python自己找到大于0.56的最接近的值(及其相应的y值)和小于0.56的最接近的值(及其相应的y值)。然后简单地插值以在x 0.56时找到y的值。
当我自己找到两个x值的索引和相应的y值并将它们输入到Python中时,这很容易实现(参见下面的代码)。 但有没有办法让python自己找到索引?
#interpolation:
def effective_height(h1,h2,g1,g2):
return (h1 + (((0.56-g1)/(g2-g1))*(h2-h1)))
eff_alt1 = effective_height(x[12],x[13],y[12],y[13])
在这段代码中,我必须找到对应于最接近的较小值到0.56的索引[12]和[13]以及对应于0.56的最接近的较大值。
现在我正在寻找一种类似的技术,我只是告诉python在x的两个值x = 0.56之间进行插值,并在x = 0.56时打印相应的y值。
我看过scipy的插值,但是在这种情况下不认为它会有所帮助,尽管在我的情况下进一步说明如何使用它也会有所帮助。
答案 0 :(得分:2)
Numpy interp
能做你想做的事吗?:
import numpy as np
x = [0,1,2]
y = [2,3,4]
np.interp(0.56, x, y)
Out[81]: 2.56
答案 1 :(得分:0)
鉴于您的两个数组x
和y
,您可以使用SciPy执行以下操作。
from scipy.interpolate import InterpolatedUnivariateSpline
spline = InterpolatedUnivariateSpline(x, y, k=5)
spline(0.56)
关键字k
必须介于1到5之间,controls the degree of the spline。
示例:
>>> x = range(10)
>>> y = range(0, 100, 10)
>>> spline = InterpolatedUnivariateSpline(x, y, k=5)
>>> spline(0.56)
array(5.6000000000000017)