插值到密度较小的网格+Python中的最小正方形拟合

2024-09-30 16:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两个星期日:

ndarrays

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

蓝色曲线ndarray具有以下参数:

enter image description here

橙色曲线ndarray具有以下参数:

enter image description here

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

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


Tags: 函数numpy参数错误光谱曲线橙色蓝色
2条回答

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

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

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

大致如下:

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()

返回类似于: enter image description here

相关问题 更多 >