Это мой первый вопрос 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.
Спасибо!