为什么linspace和interp1d的输出始终相同?

时间:2018-09-08 07:45:01

标签: python numpy scipy interpolation

所以我在做作业,因此我们必须使用插值法(线性插值法)。我们被要求使用interp1d中的scipy.interpolate包,并使用给定的新y值和旧坐标x和{{ 1}}。
为了获取新的(x1,y1)坐标(我们将其称为(x2,y2)),我在x和新的x_new坐标之间使用了np.linspace(我们将其称为(x1,x2) )我发现在y上使用了y_new函数。

但是,我还注意到在interp1d上应用x_new会产生与np.linspace上的(y1,y2)完全相同的y_new值。

有人可以向我解释为什么会这样吗?如果这是真的,那总是真的吗?
如果始终都是这样,为什么在可以使用interp1d的地方时我们根本需要使用x_new函数呢?

这是我写的代码:

interp1d

1 个答案:

答案 0 :(得分:1)

偶然发现这一点的原因是,您仅将两个点用于线性函数的插值。您有两个不同的x值和相应的y值作为输入。然后,您要求interp1d找到最适合您的输入数据的线性函数f(x)=m*x +b。因为只有两个点作为输入数据,所以有一个精确的解决方案,因为线性函数恰好由两个点定义。为此,请执行以下操作:画一张纸,画两个点,然后考虑连接这些点可以画多少条直线。

从两个输入点获得的线性函数由参数m=(y1-y2)/(x1-x2)b=y1-m*x1定义,其中(x1,y1),(x2,y2)是您的两个输入点(或{{1}中的元素}和x数组中的数组。

那么,y现在做什么?它为您提供np.linspace(start, stop, num,...)num之间的start等距点。这些点是stopstart,...,start + delta。步进宽度enddelta给出。 -1来自要包含端点的事实。因此,您间隔中的第delta=(end-start)/(num - 1)个点位于n。在应用xn=x1+n*(x2-x1)/(num-1)中的线性函数之后,这些点将以什么y值结束?让我们将其插入:

interp1d。简化后得到f(xn)=m*xn+b=(y1-y2)/(x1-x2)*(x1+n/(num-1)*(x2-x1)) + y1-(y1-y1)/(x1-x2)*x1。这正是您从f(xn)=(y2-y1)*n/(num - 1) + y1(即np.linspace(y1,y2,num))中得到的!

现在,这始终有效吗?没有!我们利用了这样一个事实:我们的线性函数由我们在f(xn)=yn中使用的间隔的两个端点定义。因此,这通常不起作用。尝试在输入列表中再增加一个np.linspace值和另外一个x值,然后比较结果。