网格数据预测方法

时间:2018-05-14 12:34:32

标签: python scipy interpolation

使用scipy中的griddata进行插值(三次样条等),我们必须将我们插入的数据作为参数,同时将我们想要进行“预测”的新点作为参数”

是否有可能构建一个“griddata对象”,它可以有一种方法来预测一个新的点,而不是每次重建一个新的插值样条......? (例如,与回归树一样,我们首先构造树,然后我们使用.predict(new_points)方法)。

以下是一个例子:

import pandas as pd
import numpy as np
import sklearn
import scipy.interpolate as itp

n = 100
x1 = np.linspace(-2, 4, n)

X1 = []
X2 = []

for x in x1:
    X1.append( [x for i in range(0, n)] )
    X2.append( np.linspace(9, 15, n) )

X1 = np.array(X1).flatten()
X2 = np.array(X2).flatten()

Y1 = exp( 2*X1 )
    Y2 = 3 * sqrt(X2)

#Data frames :
X = np.transpose( [X1, X2] )
X = pd.DataFrame(X, columns=["X1", "X2"])

Y = np.transpose( [Y1, Y2] )
Y = pd.DataFrame(Y, columns=["Y1", "Y2"])

X_new = np.transpose( [[-2], [9]] )

inter_cubic = itp.griddata(X, Y, X_new, method='cubic', fill_value=nan, rescale=False)

print(inter_cubic)

print(exp(2*(-2)), 3*sqrt(9))

现在inter_cubic只是一个numpy数组..

有没有办法执行它,还是我们可以使用另一个“样条”构造函数?

1 个答案:

答案 0 :(得分:1)

如果你查看source code for griddata(向下滚过文档字符串以查看实际代码),你会发现它是几个其他插值函数的包装器,其中大部分工作方式都与你一样。想。在您的情况下,使用二维数据和三次插值,griddata执行此操作:

        ip = CloughTocher2DInterpolator(points, values, fill_value=fill_value,
                                        rescale=rescale)
        return ip(xi)

因此,您可以使用griddata而不是CloughTocher2DInterpolator。具体来说,使用脚本中的名称,可以使用

创建插补器
ip = itp.CloughTocher2DInterpolator(X, Y, fill_value=np.nan, rescale=False)

对象ip没有predict方法;你只需要用你想要评估插值器的点来调用它。在你的情况下,你会写

Y_new = ip(X_new)