Различные результаты от numpy interp и Matlab interp1d - линейная интерполяция - PullRequest
0 голосов
/ 30 мая 2018

Это мой первый вопрос StackOverflow, так что наберитесь терпения.Я искал пару дней без удачи.Я аспирант, изучающий океанографию, и я изучаю Python 3 (и NumPy и XArray), конвертируя существенный код Matlab в Python.

Я обнаружил разницу при линейной интерполяции.Оригинальный код использует функцию interp1d от Matlab, а я использую функцию interp от numpy.В большинстве случаев результаты совпадают, но есть небольшая разница в том, что в данных присутствуют значения NaN.

Скажем, у меня есть одномерный массив, например, температура на определенной глубине, измеренная с течением времени,и он имеет значения NaN в определенных точках.Код Matlab интерполирует его по более длинным временным рядам, обычно с одинаковыми приращениями времени, эффективно помещая более короткие временные ряды в более длинные (пожалуйста, не говорите мне, что есть лучшие способы сделать это, я просто пытаюсь разобраться с этимвопрос на данный момент :-)).

Интерполяция Matlab оставляет значения температуры такими, какие они есть;но интерполяция Numpy удаляет последние значения перед NaN.Если я использую маску для удаления NaN, она оставляет все значения, но заполняет любые секции NaN не с обоих концов.

например (исходная запись)

[nan nan 3.0 4.0 3.5 nan nan 2.0 3.2 3.1 1.5 nan nan]

Matlab дает:

[nan .... nan nan nan 3.0 4.0 3.5 nan nan 2.0 3.2 3.1 1.5 nan nan ... nan]

Numpy дает либо (без наномаски):

[nan .... nan nan nan 3.0 4.0 nan nan nan 2.0 3.2 3.1 nan nan nan ... nan]

или (с наномаской):

[nan .... nan nan nan 3.0 4.0 3.5 3.1 2.4 2.0 3.2 3.1 1.5 nan nan ... nan]

Есть ли какие-либо аргументы, которые мне следуетпереходить к np.interp, чтобы получить тот же результат, что и функция Matlab?Или это просто разница в языке, и мне приходится с этим бороться?Единственные аргументы, которые я сейчас использую, это

left=np.nan and right=np.nan.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...