Python Numpy interp不插值/外推值,仅查找数据点是否高于或低于最大经验值
我有以下经验数据:Python Numpy interp不插值/外推值,仅查找数据点是否高于或低于最大经验值,python,numpy,Python,Numpy,我有以下经验数据: emp_data = np.array([[0.5, -24.111869188789498], [1.0, -30.166986253668671], [1.5, -33.310250723584765], [2.0, -35.629672538473848], [2.5, -39.416821042883605], [3.0, -41.05367278405226], [3.5, -42.702793174115918], [3.653, -41.173808136289
emp_data = np.array([[0.5, -24.111869188789498],
[1.0, -30.166986253668671],
[1.5, -33.310250723584765],
[2.0, -35.629672538473848],
[2.5, -39.416821042883605],
[3.0, -41.05367278405226],
[3.5, -42.702793174115918],
[3.653, -41.173808136289971],
[4.0, -45.327195234249011],
[4.5, -47.170664776211105],
[5.0, -45.838914309065679],
[5.5, -47.83778613822286],
[6.0, -49.55982614930786],
[6.5, -48.899619370977753]])
我想根据一个新的数据点,类似于第二列,从这个数据中插值或外推一个值。eg-38。如果我尝试插值,这个值interp返回6.5
numpy.interp(-38, emp_data[:,1], emp_data[:,0])
Out[65]: 6.5
numpy interp对低于-48.89(经验数据中的最大值)的任何值返回6.5,对高于-48.89的任何值返回0.5。有人知道为什么吗
感谢
numpy.interp的帮助
不检查x坐标序列xp
是否增加。如果
xp
没有增加,结果毫无意义。一个简单的检查
递增是::
np.all(np.diff(xp) > 0)
看起来你混淆了横坐标,即x值,和纵坐标,即f(x)或y值
因此,如果您想以自动化的方式找到x值,其中f(x)=-38,您需要的不仅仅是插值。例如,您可以将多项式p(x)
拟合到数据中,然后查找p(x)-(-38)
的根。文档中提到xp
值必须增加。你试过对数组进行排序吗?看起来你是对的,我订购了xp,它在数据内插值,但不能在xp范围外进行外推。你有没有什么简单的方法可以将多项式拟合到数据中(例如另一个numpy函数?)我不认为像你通过排序和插值那样反转x和y是个好主意,因为只有当你的函数是内射的,即增加(或减少)时,这才是适定的。有numpy.polyfit
来找到插值函数。你应该用它来寻找根。然而,外推会导致很大的误差。我不需要非常精确——只要给我一个大概的数字就行了。所以如果我找到多项式,我想找到p的值,其中p(x)=-38(或者任何我想外推的值?