Python 中插值到密度较低的网格 + 最小二乘拟合

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

我有 2 个 ndarray:

https://img1.sycdn.imooc.com/65966fa300017d6711920564.jpg

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

蓝色曲线ndarray有以下参数:

https://img1.sycdn.imooc.com/65966fb0000146af02240213.jpg

橙色曲线ndarray有以下参数:

https://img1.sycdn.imooc.com/65966fbb00012ba002620212.jpg

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

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


心有法竹
浏览 119回答 2
2回答

SMILET

大致如下:import numpy as npimport matplotlib.pyplot as pltn_denser = 33n_coarser = 7x_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.5y_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()返回的内容如下:

扬帆大鱼

您的困惑似乎源于混淆您提到的方法。最小二乘不是插值方法,而是一种最小化曲线拟合方法。一个关键的区别是,通过插值,绘图总是通过原始数据点。对于最小二乘法,这种情况可能会发生,但通常情况并非如此。如果您需要传递原始数据点,三次样条插值将为您提供“漂亮”的图。如果您想使用最小二乘法,您需要知道您想要拟合什么次数的多项式。最常见的是线性(一阶)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python