我正在处理音频数据,所以我的数据集通常在 40000 到 120000 点(1 到 3 秒)左右。目前我正在为某些任务使用线性插值,我想使用三次插值来改善一些结果。
我一直在使用interp1d
withkind='linear'
来生成插值函数。这很好用并且非常直观。
但是,当我切换到 时kind='cubic'
,我的电脑就疯了——内存开始抖动,Emacs 窗口变暗,鼠标指针开始移动非常缓慢,硬盘变得非常活跃。我认为这是因为它使用了大量内存。我被迫(非常缓慢地)打开一个新的终端窗口,运行htop
并终止 Python 进程。(我应该提到我正在使用 Linux。)
我对三次插值的理解是一次只需要检查数据集的 5 个点,但也许这是错误的。
无论如何,我怎样才能最轻松地从线性插值切换到三次插值,而不会碰到这个明显的内存使用砖墙?所有示例都interp1d
使用很少的数据点,并且文档中的任何地方都没有提到它对于更高阶的性能不佳,所以我不知道接下来要尝试什么。
编辑:我刚试过UnivariateSpline
,这几乎就是我要找的。问题是插值不会触及所有数据点。我正在寻找能够生成通过所有数据点的平滑曲线的东西。
Edit2:看起来可能InterpolatedUnivariateSpline
就是我要找的东西。