为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2024-01-04 16:42:55
我是Python新手,对两个 ndarrays 的插值和最小二乘拟合有点困惑。我有 2 个 ndarray:我的最终目标是对建模光谱(蓝色曲线)与观察到的光谱(橙色曲线)进行最小二乘拟合。蓝色曲线ndarray有以下参数:橙色曲线ndarray有以下参数:作为第一步也是最简单的一步,我想绘制两个 ndarray 之间的残差(差异),但问题是,因为它们分别具有不同的大小 391 和 256。我尝试使用numpy.reshapeorndarray.resphape函数,但它们会导致错误。正确的解决方案可能是从将蓝色曲线插值到橙色曲线的密度较小的网格中开始。我尝试过使用numpy.interp函数,但它也会导致错误。
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

大致如下:


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

返回的内容如下:

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

查看完整回答
反对 回复 2024-01-04
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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

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

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


查看完整回答
反对 回复 2024-01-04
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信