MATLAB中的“最近邻”类插值

时间:2011-09-05 13:35:45

标签: matlab interpolation

这是一件很小的事情,但现在已经困扰了我一段时间,所以我想我会让人群解决开始:)

我有一个带时间戳和相应逻辑值(或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]'

其中output的第一列是插值中使用的of的时间。如果我使用interp1和'最近'算法,它将给出

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

这不是我想要的。

1 个答案:

答案 0 :(得分: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,它最符合您的条件,因为您不想要“最近”的邻居,而是第一个较低或相等的邻居(据我所知)。因此,插值时间戳索引的简单截断将为您提供结果。