matlab最近邻插值结果

matlab nearest neighbor interpolation result

vq = interp1(v, xq, 'nearest', 0)

我希望最近邻插值类似于 round(xq) 并获得 v 中的值。例如:

v = [1 0];
xq =  0.4 : 0.2 : 2
xq =
     0.4   0.6   0.8   1.0   1.2   1.4   1.6   1.8   2.0

round(xq)
ans =
     0     1     1     1     1     1     2     2     2

vq = interp1(v, round(xq), '', 0) % get ones for round(xq) == 1
vq =
     0     1     1     1     1     1     0     0     0

我预计 'nearest' 与上述 round 类似。然而,

vq = interp1(v, xq, 'nearest', 0)
vq =
     0     0     0     1     1     1     0     0     0

这既不是round(xq),也不是floor,也不是ceil。我错过了什么?

问题是您的前三个点 (0.4, 0.6, 0.8) 超出了域(即 [1, 2])。所以 interp1 使用你设置为零的‘extrapval’。

尝试:

vq = interp1(v, xq, ‘nearest’, ‘extrap’)

尽管对于所有 x < 1,这将是 return 1,但不确定这是否是您想要的。