【问题标题】:matlab nearest neighbor interpolation resultmatlab最近邻插值结果
【发布时间】:2019-03-14 20:17:55
【问题描述】:
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

我预计“最近”与上面的 round 类似。然而,

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

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

【问题讨论】:

    标签: matlab interpolation


    【解决方案1】:

    问题是您的前三个点(0.4、0.6、0.8)超出了域(即 [1, 2])。因此 interp1 使用您设置为零的“extrapval”。

    试试:

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

    虽然对于所有 x

    【讨论】:

    • v = [1 0];。你从哪里弄来的那 2 个?
    • 文档。 “当 v 为向量时,默认点为 1:length(v)。”您正在向它传递一个 2 元素向量,因此它假定 x = 1:2。因此,您实际上是在传递:vq = interp1(1:2, v, xq, 'nearest', 0),对于任何x<1x > 2,它将返回您设置为零的extrapval
    • @bconrad 这就是确切的原因。它只发生在边缘值上。我试图将 x 从 1:2 移动到 (1:2)-0.5 甚至更多,但它们都没有解决边缘问题。所以现在我坚持使用 round(xq) 解决方案。
    猜你喜欢
    • 2011-11-10
    • 2010-12-05
    • 2014-04-12
    • 1970-01-01
    • 2015-11-27
    • 2012-04-24
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多