scipy.interpolate.interp1d中kind参数不同值的含义是什么?

12

SciPy文档解释了interp1d函数的kind参数可以使用'linear', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic'这六个值。最后三个是样条插值阶数,而'linear'则不需要解释。那么'nearest''zero'分别表示什么意思呢?

2个回答

19
  • nearest选项“捕捉”到最近的数据点。
  • zero是一阶样条插值。它在任意点的值为最后一个原始值。
  • linear执行线性插值,slinear使用一阶样条插值。它们使用不同的代码,但可能会产生类似但微妙不同的结果
  • quadratic使用二阶样条插值。
  • cubic使用三阶样条插值。

请注意,k参数还可以接受指定样条插值次数的整数。


import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interpolate

np.random.seed(6)
kinds = ('nearest', 'zero', 'linear', 'slinear', 'quadratic', 'cubic')

N = 10
x = np.linspace(0, 1, N)
y = np.random.randint(10, size=(N,))

new_x = np.linspace(0, 1, 28)
fig, axs = plt.subplots(nrows=len(kinds)+1, sharex=True)
axs[0].plot(x, y, 'bo-')
axs[0].set_title('raw')
for ax, kind in zip(axs[1:], kinds):
    new_y = interpolate.interp1d(x, y, kind=kind)(new_x)
    ax.plot(new_x, new_y, 'ro-')
    ax.set_title(kind)

plt.show()

在此输入图像描述


线性和样条插值在某些病态情况下并不总是产生相同的结果,请参见http://gist.github.com/stringfellow/8ae4d3f25ca525e75bb79c01fbda4a24。 - Steve Pike
@StevePike:非常有趣,但看起来这可能是Pandas特定的问题,而不是scipy。也就是说,当我将您的数据适应到我的代码中(没有Pandas),'interpolate.interp1d'似乎仍然会在'kind='linear''或'kind='slinear''时产生相同的结果。 - unutbu
啊哈..好发现!我以为pandas只是简单地传递它...太愚蠢了!相当令人困惑... - Steve Pike
实际上,scipy确实有所不同,请参见更新的测试 https://gist.github.com/stringfellow/8ae4d3f25ca525e75bb79c01fbda4a24 -- 在这里pandas和scipy是相同的 - 尽管它们在图表上看起来相同,但它们是不同的值,在某些情况下重要到足以不假设它们是相同的! - Steve Pike
@StevePike:感谢您仔细追踪并进行编辑。 - unutbu

0

‘nearest’ 返回距离参数最近的X个数据点,或者使用距离x最近的数据点对函数y=f(x)进行插值

'zero' 我猜相当于截断参数并使用最靠近零的数据点


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接