【问题标题】:How would you find the roots of a linear interpolation in Python?如何在 Python 中找到线性插值的根源?
【发布时间】:2020-12-22 22:45:03
【问题描述】:

我正在计算具有不规则形状的光曲线的半高全宽。我现在的方法是

  • 将样条曲线 (scipy.interpolate.UnivariateSpline) 拟合到数据(减去最大值的一半,因此 y = 0 最大值的一半)
  • 找到样条的根 (UnivariateSpline.roots())
  • 找出第一个根和最后一个根之间的差异以确定曲线在半最大值处的宽度

roots 方法仅适用于三次样条,但我需要样条是线性的,否则我会得到如下图所示的结果(由于数据点的间距)。我应该注意,我正在处理数百个数据集,因此手动选择这些“根”不太可行。

有没有人有任何技巧来找到 linear 样条曲线(或给定 y 值的所有 x 值)的根?非常感谢!

【问题讨论】:

  • 你可以循环遍历 y 值来找到 y[n]half (反向交叉)?然后只需线性插值即可得到 y == half 处的 x 值。

标签: python scipy signals interpolation


【解决方案1】:

您可以使用make_interp_spline_(..., k=1) 获取一个BSpline 对象,通过PPoly.from_spline() 转换为PPoly,结果有一个.roots 方法。

或者,正如其他答案所建议的那样,只需找到相关区间并求解线性段的根。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多