如果我想要空插值(分段常数),numpy.interp的最佳直接替换是什么?

Jos*_*ngs 6 python interpolation numpy

numpy.interp非常方便,相对较快.在某些情况下,我想将其输出与稀疏值传播的非插值变量(在"密集"输出中)进行比较,结果在稀疏输入之间是分段常数.我想要的函数也可以称为"稀疏 - >密集"转换器,它复制最新的稀疏值,直到它找到一个较晚的值(一种空插值,好像零时间/距离从前一个值开始经过).

不幸的是,调整源代码并不容易,numpy.interp因为它只是编译函数的包装器.我可以使用Python循环自己编写,但希望找到一种C-speed方法来解决问题.

更新:下面的解决方案(scipy.interpolate.interp1dwith kind='zero')非常慢,每次调用需要10秒以上(例如输入500k的长度,即50%填充).它kind='zero'使用零阶样条实现,调用spleval非常慢.但是,kind='linear'(即默认插值)的源代码为使用直接numpy解决问题提供了一个很好的模板(最小化更改是设置slope=0).该代码显示了如何使用numpy.searchsorted来解决问题,并且运行时类似于调用numpy.interp,因此通过调整scipy.interpolate.interp1d线性插值的实现来跳过插值步骤(斜率!= 0混合相邻值)来解决问题.

HYR*_*YRY 4

可以scipy.interpolate.interp1d进行各种插值:\xe2\x80\x98线性\xe2\x80\x99、\xe2\x80\x99nearest\xe2\x80\x99、\xe2\x80\x98zero\xe2\x80\x99、\xe2\ x80\x98s线性\xe2\x80\x99、\xe2\x80\x98二次、\xe2\x80\x98三次\xe2\x80\x99。

\n\n

请检查文档:http://docs.scipy.org/doc/scipy-0.10.1/reference/ generated/scipy.interpolate.interp1d.html#scipy.interpolate.interp1d

\n