Python 这个插值函数是如何工作的?
我正试图写一个函数,它插值一些数据,然后你可以选择x轴上的任何值来找到y轴上的对应点 例如:Python 这个插值函数是如何工作的?,python,scipy,Python,Scipy,我正试图写一个函数,它插值一些数据,然后你可以选择x轴上的任何值来找到y轴上的对应点 例如: f = f_from_data([3, 4, 6], [0, 1, 2]) print f(3.5) 得出答案 0.5 我找到了一个答案,看起来是这样的: def f_from_data(xs,ys): return scipy.interpolate.interp1d(xs, ys) 有人能解释一下这是怎么回事吗?我理解interp1d,但我不确定这行简单的代码如何得到答案,例如 pri
f = f_from_data([3, 4, 6], [0, 1, 2])
print f(3.5)
得出答案
0.5
我找到了一个答案,看起来是这样的:
def f_from_data(xs,ys):
return scipy.interpolate.interp1d(xs, ys)
有人能解释一下这是怎么回事吗?我理解interp1d,但我不确定这行简单的代码如何得到答案,例如
print f(5)
输入到它中。引用:
因此,使用x
值调用返回的函数将给出相应的插值y
值。引用以下内容:
因此,使用
x
值调用返回的函数会得到相应的插值y
值。一个简单的示例可能会有所帮助interp1d
是一个类似函数的类。它返回的不是一个数字,而是另一个类似对象的函数。再次调用后,它将在输入值x处返回y的插值。也可以将此函数馈送到单个点或整个阵列:
import numpy as np
from scipy.interpolate import interp1d
X=[3,4,6]
Y=[0,1,2]
f = interp1d(X,Y, bounds_error=False)
print f(3.5)
X2 = np.linspace(3, 6, 5)
print X2
print f(X2)
举个简单的例子可能会有所帮助
interp1d
是一个类似函数的类。它返回的不是一个数字,而是另一个类似对象的函数。再次调用后,它将在输入值x处返回y的插值。也可以将此函数馈送到单个点或整个阵列:
import numpy as np
from scipy.interpolate import interp1d
X=[3,4,6]
Y=[0,1,2]
f = interp1d(X,Y, bounds_error=False)
print f(3.5)
X2 = np.linspace(3, 6, 5)
print X2
print f(X2)
您的示例使用线性插值-数据点之间的直线连接线 因此,对于给定的数据(
xs=[3,4,6]
和ys=[0,1,2]
),函数如下所示
其中蓝点为输入数据,绿线为插值函数,红点为测试点f(3.5)==0.5
要计算
f(5.0)
:
首先,您必须找出您所在的线段
x==5
在第二段中,在4和6之间,因此我们正在寻找点C(5,y)
在点A(4,1)
和B(6,2)
之间
C
在线上,因此AC=k*AB
其中0 您的示例使用线性插值-数据点之间的直线连接线
因此,对于给定的数据(xs=[3,4,6]
和ys=[0,1,2]
),函数如下所示
其中蓝点为输入数据,绿线为插值函数,红点为测试点f(3.5)==0.5
要计算f(5.0)
:
首先,您必须找出您所在的线段
x==5
在第二段中,在4和6之间,因此我们正在寻找点C(5,y)
在点A(4,1)
和B(6,2)
之间
C
在线上,因此AC=k*AB
其中0。参见文档:参见文档:嗨,Simon,谢谢。我看过了,但我不确定“调用方法”是什么意思。文档将函数描述为一个对象。在函数上执行“call method”只调用函数。f
有一个\uu调用方法。使用f(…)
时会调用此函数callable(f)
返回True
。你好,Simon,谢谢,我看过了,但我不确定“调用方法”是什么意思。文档将函数描述为一个对象。在函数上执行“call method”只调用函数。f
有一个\uu调用方法。使用f(…)
时会调用此函数callable(f)
返回True
。正如Simon(从文档中)所指出的那样,interp1d
实际上是一个类(是的,没有cap),而f
是一个interp1d
对象,带有调用方法。所以这两个函数看起来都像函数,即使它们不是。@hpaulj这是一个很好的观点(我将更新我的答案),但我认为OP在理解如何使用函数时遇到了困难(但我可能只是从accept推断)。谢谢正如Simon(从文档中)所指出的,interp1d
实际上是一个类(是的,没有cap),而f
是一个interp1d
对象,具有调用方法。所以这两个函数看起来都像函数,即使它们不是。@hpaulj这是一个很好的观点(我将更新我的答案),但我认为OP在理解如何使用函数时遇到了困难(但我可能只是从accept推断)。谢谢
0.5
[ 3. 3.75 4.5 5.25 6. ]
[ 0. 0.75 1.25 1.625 2. ]
y = Ay + (By - Ay) * (Cx - Ax) / (Bx - Ax)
y = 1. + (2. - 1.) * (5. - 4.) / (6. - 4.)
= 1.5
f = scipy.interpolate.interp1d([3, 4, 6], [0, 1, 2])
# f is now a function that you can call, like
f(5.0) # => 1.5