Griddata预测方法

Griddata predict method

使用 scipy 中的网格数据来执行插值(三次样条和其他),我们必须将插值的数据作为参数,同时,我们要在其上进行插值的新点想做一个"prediction".

是否有可能构造一个 "griddata object",它有一种方法来预测新点,而无需每次都重建新的插值样条...? (例如,与回归树一样,我们首先构建树,然后我们应用 .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 数组..

有没有办法执行它,或者我们可以使用另一个 "spline" 构造函数吗?

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

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

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

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

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

Y_new = ip(X_new)