Python 为什么Matlab interp1产生的结果与numpy interp不同?

Python 为什么Matlab interp1产生的结果与numpy interp不同?,python,matlab,numpy,interpolation,Python,Matlab,Numpy,Interpolation,编辑:编辑代码以生成与Matlab一致的结果。见下文 我正在将Matlab脚本转换为Python,在某些情况下,线性插值结果是不同的。我想知道为什么,是否有办法解决这个问题 下面是Matlab和Python中的代码示例以及结果输出(注意,在本例中t恰好等于tin): MATLAB: t= [ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125]

编辑:编辑代码以生成与Matlab一致的结果。见下文

我正在将Matlab脚本转换为Python,在某些情况下,线性插值结果是不同的。我想知道为什么,是否有办法解决这个问题

下面是Matlab和Python中的代码示例以及结果输出(注意,在本例中t恰好等于tin):

MATLAB:

t= [ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667, 736696.0125];
tin =[ 736696., 736696.00208333, 736696.00416667, 736696.00625, 736696.00833333, 736696.01041667,  736696.0125];
xin = [   nan , 1392.,  1406. , 1418.  ,  nan , 1442. ,   nan];

interp1(tin,xin,t)

ans =

 NaN        1392        1406        1418         NaN        1442         NaN
Python(numpy)

(scipy interpolate.interp1d生成与numpy相同的结果)


似乎Matlab在其插值中包含了额外的等式检查

线性1-D插值通常通过查找两个横跨输入值
x
的x值来完成,然后计算结果如下:

y = y1 + (y2-y1)*(x-x1)/(x2-x1)
如果您传入的
x
值正好等于输入的x坐标之一,则例程通常会计算正确的值,因为
x-x1
将为零。但是,如果您的输入数组具有
nan
作为
y1
y2
的值,则这些值将传播到结果中

根据您发布的代码,我最好的猜测是Matlab的插值函数有一个额外的检查,类似于:

if x == x1:
    return y1
并且numpy函数没有这个检查

要在numpy中实现相同的效果,可以执行以下操作:

np.where(t == tin,xin,np.interp(t,tin,xin))

我不知道Python的情况,但Matlab有9种不同的方法,可供
interp1
使用。。。Python也必须有几个方法。由于您没有在上面的任何代码中明确指定方法,您确定这两种语言的默认设置相同吗?顺便说一句,您的问题非常类似,您已经有评论要求您显示一些代码。如果您是同一个人,则最好通过添加此处显示的信息和代码来编辑其他问题(当其他问题完成时,您可以删除此问题以避免重复问题)。这是因为您的y值具有NAN。大概numpy实现做了类似于
y1+(y2-y1)*(x-x1)/(x2-x1)
的事情,
nan
被传播到结果中,matlab代码有一个特殊的检查
如果(x==x1)返回y1
@Hoki我知道这个问题,但不是谁问的。我的回复是添加了我的代码(因为有一位评论者要求提供),但一位版主删除了我的代码,所以我决定制作一个新的。另外,numpy和matlab的默认值都是线性插值。@user545424您完全正确。我现在检查x==x1并返回y1的情况,得到的结果与matlab一致。
np.where(t == tin,xin,np.interp(t,tin,xin))