【问题标题】:Interpolation to less denser grid + Least-squares fitting in Python插值到密度较小的网格 + Python 中的最小二乘拟合
【发布时间】:2020-10-26 13:40:40
【问题描述】:

我是 Python 新手,对两个 ndarray 的 插值最小二乘拟合有点困惑。

我有 2 个 ndarray:

我的最终目标是使建模光谱(蓝色曲线)与观察光谱(橙色曲线)进行最小二乘拟合。

蓝色曲线ndarray有以下参数:

橙色曲线ndarray有以下参数:

作为第一步也是最简单的一步,我想绘制这两个 ndarray 之间的残差(差异),但问题是因为它们分别具有不同的大小 391 和 256。我尝试使用numpy.reshapendarray.resphape 函数,但它们会导致错误。

可能正确的解决方案是从将蓝色曲线插值到橙色曲线的密度较小的网格中开始。我尝试使用numpy.interp 函数,但它也会导致错误。

【问题讨论】:

    标签: python multidimensional-array interpolation least-squares


    【解决方案1】:

    大致如下:

    import numpy as np
    import matplotlib.pyplot as plt
    
    n_denser = 33
    n_coarser = 7
    
    x_denser = np.linspace(0,1,n_denser)
    y_denser = np.power(x_denser, 2) + np.random.randn(n_denser)/10.
    
    x_coarser = np.linspace(0,1,n_coarser)
    y_coarser = np.power(x_coarser, 2) + np.random.randn(n_coarser)/10. + 0.5
    
    y_dense_interp = np.interp(x_coarser, x_denser, y_denser)
    
    plt.plot(x_denser, y_denser, 'b+-')
    plt.plot(x_coarser, y_coarser, 'ro:')
    plt.plot(x_coarser, y_dense_interp, 'go')
    
    plt.legend(['dense data', 'coarse data', 'interp data'])
    plt.show()
    

    返回类似:

    【讨论】:

      【解决方案2】:

      您的困惑似乎源于混淆了您提到的方法。最小二乘法不是一种插值方法,而是一种最小化曲线拟合方法。一个关键的区别是,插值图总是通过原始数据点。对于最小二乘法,这可能会发生,但通常情况并非如此。

      如果您需要通过原始数据点,三次样条插值将为您提供“漂亮”的图。

      如果你想使用最小二乘,你需要知道你想要拟合的多项式。最常见的是线性(一阶)。

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 1970-01-01
        • 2020-10-02
        • 1970-01-01
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        相关资源
        最近更新 更多