【问题标题】:Griddata predict method网格数据预测方法
【发布时间】:2018-05-14 22:33:59
【问题描述】:

使用 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 数组..

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

【问题讨论】:

    标签: python scipy interpolation


    【解决方案1】:

    如果您查看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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2020-02-16
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 2023-03-17
      相关资源
      最近更新 更多