移位插值不会产生预期的行为

时间:2018-03-14 14:32:00

标签: python scipy interpolation ndimage

当使用scipy.ndimage.interpolation.shift沿一个轴移动numpy数据数组并使用周期性边界处理(mode = 'wrap')时,我得到一个意外的行为。例程尝试强制第一个像素(index 0)与最后一个像素(index N-1)相同而不是" last加一(index N)"

最小例子:

# module import
import numpy as np
from scipy.ndimage.interpolation import shift
import matplotlib.pyplot as plt

# print scipy.__version__
# 0.18.1

a = range(10)

plt.figure(figsize=(16,12))

for i, shift_pix in enumerate(range(10)):
    # shift the data via spline interpolation
    b = shift(a, shift=shift_pix, mode='wrap')

    # plotting the data
    plt.subplot(5,2,i+1)
    plt.plot(a, marker='o', label='data')
    plt.plot(np.roll(a, shift_pix), marker='o', label='data, roll')
    plt.plot(b, marker='o',label='shifted data')
    if i == 0:
        plt.legend(loc=4,fontsize=12)
    plt.ylim(-1,10)
    ax = plt.gca()
    ax.text(0.10,0.80,'shift %d pix' % i, transform=ax.transAxes)

蓝线:班次前的数据
绿线:预期换班行为
红线:scipy.ndimage.interpolation.shift的实际班次输出

我如何调用该函数或我如何理解mode = 'wrap'的行为是否有错误?当前结果与相关scipy tutorial page和另一个StackOverflow post的模式参数说明形成对比。代码中是否存在一个错误?

使用的Scipy版本是0.18.1,分发在anaconda-2.2.0

enter image description here

1 个答案:

答案 0 :(得分:1)

值得注意的是,此行为似乎是一个错误,如本SciPy问题中所述: https://github.com/scipy/scipy/issues/2640

该问题似乎影响modescipy.ndimage以外的所有mode='mirror'外推。{p>