代码之家  ›  专栏  ›  技术社区  ›  hellowolrd

网格数据预测方法

  •  3
  • hellowolrd  · 技术社区  · 6 年前

    由于scipy中的griddata用于执行插值(三次样条曲线和其他),我们必须将插值所依据的数据作为参数,同时,我们还必须将要进行“预测”的新点作为参数。

    是否有可能构造一个“griddata对象”,该对象将有一种预测新点的方法,而无需每次重建新的插值样条线? (例如,与回归树一样,我们首先构建树,然后应用.predict(new\u 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\u cubic只是一个numpy数组。。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Warren Weckesser    6 年前

    如果你看看 source code for griddata (向下滚动docstring以查看实际代码),您将看到它是其他几个插值函数的包装器,其中大多数函数都按照您的方式工作。在您的例子中,使用二维数据和三次插值, 网格数据 是否:

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

    所以不用 网格数据 ,您可以使用 CloughTocher2DInterpolator 。具体地说,使用脚本中的名称,可以使用

    ip = itp.CloughTocher2DInterpolator(X, Y, fill_value=np.nan, rescale=False)
    

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

    Y_new = ip(X_new)