我有以下经验数据:
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]])
我想基于类似于第二列的新数据点来插入或推断此数据中的值。例如-38。如果我尝试插值此值,则interp返回6.5。
numpy.interp(-38, emp_data[:,1], emp_data[:,0])
Out[65]: 6.5
numpy interp为-48.89以下的任何值(emprical数据中的最大值)返回6.5,对于任何上面的值都返回0.5。谁知道为什么?
感谢
答案 0 :(得分:1)
在numpy.interp
不检查x坐标序列
xp
是否正在增加。如果xp
没有增加,结果是无稽之谈。一个简单的检查 增长是::np.all(np.diff(xp) > 0)
看起来你已经混淆了横坐标,即x值和纵坐标,即f(x)或y值。
所以,如果你想以自动方式找到x值,f(x)=-38
,你需要的不仅仅是插值。例如,您可以将多项式p(x)
拟合到数据中,然后查找p(x)-(-38)
的根。