繁体   English   中英

不使用Python指定索引的插值

[英]Interpolation without specifying indices in Python

我有两个相同长度的数组,比如数组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和最接近的较大值0.56对应的索引[12]和[13]。

现在,我正在寻找一种类似的技术,我将告诉python在x = 0.56的两个x值之间进行内插,并在x = 0.56时打印y的相应值。

我已经看过scipy的插值法了,但是在这种情况下它并不会有帮助,尽管进一步阐明在我的情况下如何使用它也会有所帮助。

Numpy interp做什么吗?:

import numpy as np
x = [0,1,2]
y = [2,3,4]
np.interp(0.56, x, y)
Out[81]: 2.56

给定两个数组xy ,您可以使用SciPy执行以下操作。

from scipy.interpolate import InterpolatedUnivariateSpline

spline = InterpolatedUnivariateSpline(x, y, k=5)
spline(0.56)

关键字k必须在1到5之间,并控制样条曲线的程度

例:

>>> x = range(10)
>>> y = range(0, 100, 10)
>>> spline = InterpolatedUnivariateSpline(x, y, k=5)
>>> spline(0.56)
array(5.6000000000000017)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM