SmoothBivariateSpline дает неожиданный ответ - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь интерполировать двумерную неструктурированную сетку, используя scipy.interpolate.SmoothBivariateSpline. Боюсь, я не понял, как это должно работать.

Я пробовал на очень простом примере:

from scipy import interpolate

x = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
y = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
z = [-0.07453796, -0.10857792, -0.07307213, 0.01813757, -0.31634891, -0.47235507, -0.33198942, -0.28530956, -0.26995915, -0.40618327, -0.0950876, -0.18871505]

xy_func = interpolate.SmoothBivariateSpline(x, y, z, kx=1, ky=1, s=0)
print(xy_func.ev(0, 1), xy_func.ev(1, 0), xy_func.ev(1, 3))

Я визуализировал результат, и очевидно, что он неверный. Я также оценил результат по некоторым точкам данных, так как должно быть ясно, каким должен быть результат. Из печати я ожидал получить вывод "-0.10857792, -0.31634891, -0.28530956", но я получил результат "-0.1390947215 -0.272092075 -0.16190767".

Где я?

1 Ответ

0 голосов
/ 04 июля 2019

Я думаю, что есть две проблемы: если вы позволите изгибать фигуру с помощью увеличения, то есть kx = 2 и ky = 3, вы уже получите намного лучшее соответствие вашим прогнозам.

enter image description here

Однако, поскольку SmoothBivariateSpline не нравится вертикальный характер ваших тестовых данных, вы все равно не получите очень хорошие результаты.Если вы измените x так, чтобы он увеличивался более равномерно, т.е. (x = range (len (x)), он выглядит намного лучше.

enter image description here

...