You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.interpolate.BSpline:扩展x向量长度的经验法则有哪些?

加速度计数据平滑的ts_length取值问题

用户现有平滑代码

import numpy as np
import pandas as pd
from scipy.interpolate import make_interp_spline, BSpline
idx = [1,2,3,4]
ts_length = 200

idx = np.array(idx,dtype=int)
accel = [[-0.7437,0.1118,-0.5367],
         [-0.5471,0.0062,-0.6338],
         [-0.7437,0.1216,-0.5255],
         [-0.4437,0.3216,-0.3255],
]
print(accel)
accel = np.array(accel,dtype=float)
accel_sm = np.zeros([ts_length,3])
idxnew = np.linspace(idx.min(), idx.max(), ts_length) 
for i in range (0,3):
         c = accel[:,i]
         spl = make_interp_spline(idx, c, k=3)
         c_smooth = spl(idxnew)
         accel_sm[:, i] = c_smooth
print(accel_sm)

问题

此前随意选取ts_length=200仅为验证示例代码可行性,现想了解:相对于原idx的长度,ts_length设为多大能在实现良好平滑的同时避免生成冗余过大的数组?是否有相关经验法则?

实用经验法则与建议

  • 基础参考区间:原数据长度的3~10倍
    你用的是三次B样条插值(k=3),这类插值的特性决定了,取原数据点数量的3到10倍就足够生成足够平滑的曲线。比如你原idx长度是4,取12到40之间的数值就完全够用——超过这个范围后,曲线平滑度不会有明显提升,只会徒增数组体积和不必要的计算量。

  • 根据后续需求调整

    • 若仅需观察加速度整体变化趋势,取原长度的3~5倍即可;
    • 若需要保留更多细节(比如微小的加速度波动),可以提升到5~10倍;
    • 一旦超过10倍,新增的点本质上都是样条曲线的重复插值,不会带来额外有效信息。
  • 快速验证方法:可视化对比
    可以先分别用3倍、5倍、10倍原长度的ts_length生成平滑数据,把原数据点和不同参数的平滑曲线画在一起对比。当增大ts_length后曲线形状没有明显变化时,当前数值就是合适的上限。


内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:17:18