【问题标题】:Equivalence of movvar matlab function using python使用python的movvar matlab函数等价
【发布时间】:2021-11-25 00:22:54
【问题描述】:

使用 python/numpy/pandas 计算移动平均值的movvar(A, k, w) MATLAB 函数的等价性是什么?

我使用 Matlab 文档中的这个示例尝试了pandas.rolling.mean(),但结果不一致:

A= [4, 8, 6, -1, -2, -3, -1, 3, 4, 5]
a = pd.Series(A)

print(a.rolling(window=3).mean())

0         NaN
1    6.000000
2    4.333333
3    1.000000
4   -2.000000
5   -2.000000
6   -0.333333
7    2.000000
8    4.000000
9         NaN
dtype: float64

# using Matlab
M = movvar(A, k=3, w=1)

M = 1×10

4.0000    2.6667   14.8889   12.6667    0.6667    0.6667    6.2222    4.6667    0.6667    0.2500

【问题讨论】:

    标签: python pandas numpy matlab


    【解决方案1】:

    您需要rolling.var,并在rolling 中指定center=Truemin_periods=1,在var 中指定ddof=0

    print(a.rolling(3, center=True, min_periods=1).var(ddof=0))
    0     4.000000
    1     2.666667
    2    14.888889
    3    12.666667
    4     0.666667
    5     0.666667
    6     6.222222
    7     4.666667
    8     0.666667
    9     0.250000
    dtype: float64
    

    【讨论】:

    • 对不起,这是使用 matlab 函数的结果中的一个错字。我把movvar(A, 3) 的输出而不是movvar(A, 3, 1)。我们通过窗口中元素的数量对每个方差进行归一化
    • @BetterEnglish 有一个ddof 选项可以传递给var
    • 谢谢@Ben.T
    • @Ben.T,如何丢弃端点,如movvar(..., 'Endpoints', 'discard')
    • @Ben.T,我找到了:min_periods=3closed='left'
    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多