【问题标题】:Weighted 1D interpolation of cloud data point云数据点的加权一维插值
【发布时间】:2019-11-09 08:49:29
【问题描述】:

我有一堆数据点 (x,y),我想对其进行插值和平滑处理。

目前,我正在使用 scipy :

from scipy.interpolate import interp1d
from scipy.signal import savgol_filter

spl = interp1d(Cloud[:,1], Cloud[:,0]) # interpolation
x = np.linspace(Cloud[:,1].min(), Cloud[:,1].max(), 1000)
smoothed = savgol_filter(spl(x), 21, 1) #smoothing

这工作得很好,除了我想给interp1d 给出的数据点赋予一些权重。对另一个处理这个问题的函数有什么建议吗?

基本上,我认为我可以根据其权重乘以云的每个点的出现,但这不是很优化,因为它增加了很多要插值的点数,并减慢了算法..

【问题讨论】:

    标签: python scipy interpolation smoothing


    【解决方案1】:

    默认的interp1d 使用linear interpolation,即它只是计算两点之间的一条线。在这种情况下,加权插值在数学上没有多大意义 - 在欧几里得空间中只有一种方法可以在两点之间画一条直线。

    根据您的目标,您可以研究其他插值方法,例如,B 样条。然后你可以使用 scipy 的scipy.interpolate.splrep 并设置w 参数:

    w - 与 x 和 y 长度相同的严格正数 rank-1 权重数组。权重用于计算加权最小二乘样条拟合。如果 y 值中的误差具有向量 d 给出的标准偏差,则 w 应该是 1/d。默认是个(len(x))。

    【讨论】:

      猜你喜欢
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      相关资源
      最近更新 更多