Pandas.rolling().中位数 vs Scipy.signal.medfilt()

Pandas.rolling().median vs Scipy.signal.medfilt()

我应用了Pandas.rolling().median(),它有一个延迟相移(绿线)。

如果我使用 Scipy.signal.medfilt() 结果不会移动(黄线)。

为什么,结果不一样?

P.S。我试图研究 medfilt 实现,它使用 sigtools._order_filterND,我认为它不在 python.

代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import medfilt

x = np.zeros(100)
x[30:70] = 2
x+= .1 * np.random.randn(100)

y1 = medfilt(x, kernel_size=5)

plt.plot(x, '.-', label='original signal');
plt.plot(y1, '.-', alpha=.5, label='medfilt'); 
plt.plot(pd.Series(x).rolling(5).median(), label='rolling window');
plt.legend();

您是否尝试过在滚动时将 window 居中?

Pandas.rolling(center=True).median()