ScaleTime -快速线性矩阵插值
i = ScaleTime(Y, T)
其中T是一个值在1到size(Y,1)之间的向量。这个等价于
Yi = interp1(1:size(Y, 1), Y, T, 'linear')
如果T由统一步长定义:T = linspace(Ti, Tf, Tn)这样更快:
Yi = ScaleTime(Y, Ti, Tf, Tn)
对于非均匀输入,使用第二个函数:
我记录了例如大小为[100,000 x 10]的时间序列,并根据一些事件裁剪出大约100帧的块,并将它们规范化为101帧。
使用Matlab的INTERP1的直接方法可以工作,但速度很慢:
interp1(1:size(Y, 1), Y, Ti, '*linear')
因此,我创建了函数ScaleTime:
-线性插值
-等间距输入数据
-等距或非等距插值步骤
-矩阵输入
-不处理nan,不推断。
令我惊讶的是,ScaleTime比INTERP1甚至是现代的griddedInterpolant都要快得多。
来自FEX的函数lininterp1f和qinterp1不接受矩阵,它们明显比MEX ScaleTime慢:
//www.tianjin-qmedu.com/matlabcentral/fileexchange/8627
//www.tianjin-qmedu.com/matlabcentral/fileexchange/10286
如果您已经安装了这些工具,它们的速度将在uTest_ScaleTime中进行比较。
包括:m源、c源。
编译:第一次运行ScaleTime时自动编译,或者:
x -O刻度时间
预编译的mex函数即将发布:http://n-simon.de/mex
* * * * *
1月(2022)。ScaleTime(//www.tianjin-qmedu.com/matlabcentral/fileexchange/25463-scaletime), MATLAB中央文件交换。@ # @.