numpy interp和Matlab interp1d - 线性插值的不同结果

时间:2018-05-30 19:24:24

标签: python matlab numpy

这是我的第一个StackOverflow问题,请耐心等待。我搜索了几天没有运气。我是博士海洋学专业的学生,​​我正在通过将一些实质性的Matlab代码转换为Python来学习Python 3(以及NumPy和XArray)。

线性插值时我发现了一个区别。原始代码使用Matlab的interp1d函数,我正在使用numpy的interp函数。大多数情况下结果是相同的,但数据中存在NaN值存在细微差别。

假设我有一维阵列,例如,特定深度的温度,在增加的时间内测量,并且在某些点处具有NaN值。 Matlab代码在更长的时间序列中插入它,通常以相同的时间增量,有效地将更短的时间序列放在更长的时间内(请不要告诉我有更好的方法来做到这一点,我只是试图处理这个现在问题:-))。

Matlab插值将温度值保持原样;但Numpy插值删除了最后的NaN前值。 如果我使用掩码来移除NaN,它会留下所有值,但会填充任何NaN部分,而不是两端。

e.g。 (原始记录)

[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.

谢谢!

0 个答案:

没有答案