MATLAB中类似于“最近邻居”插值的方法

3
这是一个小问题,但一直困扰着我,所以我想让大家来解决:)
我有一个包含时间戳和相应逻辑值(或1/0)的矩阵,例如:
of = [-inf 0 10 15 190 inf; 1 0 0 1 1 0]'

还有另一个时间向量,例如:

t = 0:0.1:1e3;

现在如何(读作:您)将of中的逻辑信息进行内插/外推,使其与t中的时间戳匹配,但是内插的逻辑始终假定最后或当前值,而不是未来值?

不知道这是否有意义,但是在给定oft2的情况下,以下是预期输出:

t2 = [0 5 14 16]
output = [0 0 10 15; 0 0 0 1]'

输出结果的第一列是插值使用的of的时间。如果使用interp1和“nearest”算法,它会给出:

interp1(of(:,1), of, t2, 'nearest')
output = [0 10 15 15; 0 0 1 1]'  

这并不完全符合我的要求。
1个回答

4
假设您的向量已经排序,您可以尝试以下方法,在您的示例中似乎可以工作,尽管我没有进行过全面的测试:
of=[-inf 0 10 15 190 inf; 1 0 0 1 1 0]';
t2 = [0 5 14 16];
index=floor(interp1(of(:,1),(1:size(of,1))',t2'));
output=of(index,:);

希望能对你有所帮助。

interp1默认使用的方法是linear,这种方法最适合你的需求,因为你不需要找到“最近”的邻居,而是第一个小于或等于邻居(根据我的理解)。因此,简单地截断插值时间戳索引即可得到结果。


他妈的这就是玩意儿! :D 有时候你可以迷失在复杂性中,我想这就是发生的事情 :) 此外,如果重新思考问题,infs 就可以被忽略,所以这将起作用。 - Juhl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接