【问题标题】:"Nearest neighbor"-like interpolation in MATLABMATLAB中的“最近邻”式插值
【发布时间】:2011-11-10 15:41:26
【问题描述】:

这是一件小事,但已经困扰我一段时间了,所以我想我会开始解决人群问题 :)

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

这不是我想要的。

【问题讨论】:

    标签: matlab interpolation


    【解决方案1】:

    假设您的向量已排序,您可以尝试一下,这似乎适用于您的示例,尽管我没有对其进行广泛测试:

    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,它最适合您的情况,因为您不想要“最近”邻居,而是第一个较低或相等的邻居(据我了解)。因此,对插值时间戳索引进行简单截断即可得到结果。

    【讨论】:

    • F*** 我就是这样! :D 有时您可能会迷失在复杂性中,我想这就是这里发生的事情 :) 此外,如果重新考虑问题,可以忽略 infs,因此这会起作用。
    猜你喜欢
    • 2019-03-14
    • 2010-12-05
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多