gpt4 book ai didi

python - 尝试使用 scipy.interpolate 计算 FWHM 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:48 25 4
gpt4 key购买 nike

我在尝试查找某些数据的 FWHM 时遇到问题。我最初尝试使用 interpolate.interp1d 拟合曲线。有了这个,我能够创建一个函数,当我输入一个 x 值时,它会返回一个内插的 y 值。问题是我需要这个功能的反函数。换句话说,我想切换我的自变量和因变量。当我尝试切换它们时,出现错误,因为必须对独立数据进行排序。如果我对数据进行排序,我将丢失索引,从而丢失图形的形状。

我试过:

x = np.linspace(0, line.shape[0], line.shape[0])
self.x_curve = interpolate.interp1d(x, y, 'linear')

y 是我的数据。

为了得到逆,我试过:

self.x_curve = interpolate.interp1d(sorted(y), x, 'linear')

但值不对。

然后我继续尝试使用 UnivariateSpline 并获取根以找到 FWHM(来自这里的这个问题:Finding the full width half maximum of a peak),但是 roots() 方法一直给我一个空列表 [].

这是我用的:

x_curve = interpolate.UnivariateSpline(x, y)
r = x_curve.roots()
print(r)

这是数据的图像(使用 UnivariateSpline):

Data plot

有什么想法吗?谢谢。

最佳答案

使用 UnivariateSpline.roots() 获取 FWHM 仅当您移动数据以使其在 FWHM 处的值为 0 时才有效。

看到数据的背景很嘈杂,我会先估计基线。例如:

y_baseline = y[(x<200) & (x>350)].mean()

(根据需要调整 x 的限制)。然后移动数据,使基线和峰值的中间位置为 0。看到您的数据有最小值而不是示例中的最大值,我正在使用 y.min() :

y_shifted = y - (y.min()+y_baseline)/2.0

现在为这个移位数据拟合一个样条,roots() 应该能够找到根,其差就是 FWHM。

x_curve = interpolate.UnivariateSpline(x, y_shifted, s=0)
x_curve.roots()

如果您想从平滑数据估计 FWHM,请增加 s 参数。

关于python - 尝试使用 scipy.interpolate 计算 FWHM 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com