问题描述
我正在计算具有不规则形状的光曲线的半高全宽。我现在的做法是
- 将样条 (
scipy.interpolate.UnivariateSpline
) 拟合到数据(减去半最大值,因此 y = 0 是 半最大值) - 找到样条的根 (
UnivariateSpline.roots()
) - 找出第一个根和最后一个根之间的差异,以确定半最大值处的曲线宽度
roots
方法仅适用于三次样条,但我需要样条是线性的,否则我会得到如下图所示的结果(由于数据点的间距)。我应该注意,我正在处理数百个数据集,因此手动选择这些“根”不太可行。
有没有人有任何技巧可以找到线性样条的根(或给定 y 值的所有 x 值)?非常感谢!
解决方法
您可以使用 make_interp_spline_(...,k=1)
获取 BSpline 对象,通过 PPoly.from_spline() 转换为 PPoly,结果具有 .roots 方法。
或者,正如其他答案所建议的那样,只需找到相关区间并求解线性段的根即可。