Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个插值函数是如何工作的?_Python_Scipy - Fatal编程技术网

Python 这个插值函数是如何工作的?

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

我正试图写一个函数,它插值一些数据,然后你可以选择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,但我不确定这行简单的代码如何得到答案,例如

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