Результат интерполяции Matlab для ближайшего соседа - PullRequest
0 голосов
/ 10 октября 2018
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.Чего мне не хватает?

1 Ответ

0 голосов
/ 10 октября 2018

Проблема в том, что ваши первые три точки (0,4, 0,6, 0,8) находятся вне домена (то есть [1, 2]).Таким образом, interp1 использует «extrapval», который вы установили на ноль.

Попробуйте:

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

Хотя это вернет 1 для всех x <1, не уверен, что вы этого хотите.</p>

...