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)
使用 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)