numpy.interp
很方便,也比较快捷。在某些情况下,我想将其输出与非插值变体进行比较,其中稀疏值被传播(在“更密集”的输出中),并且结果是稀疏输入之间的分段常数。我想要的函数也可以称为“稀疏 -> 密集”转换器,它复制最新的稀疏值,直到找到较晚的值(一种空插值,就好像从较早的值开始已经过去了零时间/距离)。
不幸的是,调整源并不容易numpy.interp
因为它只是编译函数的包装。我可以使用Python循环自己编写这个,但希望找到一种C速度的方法来解决这个问题。
Update:下面的解决方案(scipy.interpolate.interp1d
with kind='zero'
)非常慢,每次调用需要 10 秒以上(例如,输入长度为 500k,填充了 50%)。它实现了kind='zero'
使用零阶样条并调用spleval
非常慢。然而,源代码kind='linear'
(即默认插值)给出了一个很好的模板,用于使用直接 numpy 解决问题(最小的变化是设置slope=0
)。该代码显示了如何使用numpy.searchsorted
解决问题和运行时类似调用numpy.interp
,所以问题可以通过调整来解决scipy.interpolate.interp1d
实现线性插值以跳过插值步骤(斜率!= 0 混合相邻值)。
The scipy.interpolate.interp1d
可以进行各种插值:“线性”、“最近”、“零”、“线性”、“二次”、“三次”。
请检查文档:http://docs.scipy.org/doc/scipy-0.10.1/reference/ generated/scipy.interpolate.interp1d.html#scipy.interpolate.interp1d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)