所以我在做作业,因此我们必须使用插值法(线性插值法)。我们被要求使用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
答案 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
等距点。这些点是stop
,start
,...,start + delta
。步进宽度end
由delta
给出。 -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
值,然后比较结果。