给定长度为 N 的时间序列
X0,X1,…,XN−1我们要按照如下定义计算第 h 滞后的自相关系数 ρ(h):
序列均值
μ=N1t=0∑N−1Xt.方差(“平均平方偏差”)
σ2=N1t=0∑N−1(Xt−μ)2.自相关系数
对于 0≤h<N,
注意这里分子是对 t=0…N−h−1 的累加和,并不再做额外的“平均”。
当 h≥N 时,按题意定义 ρ(h)=0。
时间复杂度:
因此总体 O(N2)。
空间复杂度:
需要存储输入数组和输出数组,各 O(N)。
def autocorr(arr):
    n = len(arr)
    # 1. 计算均值
    mu = sum(arr) / n
    # 2. 计算方差(平均平方偏差)
    var = sum((x - mu) ** 2 for x in arr) / n
    res = []
    # 3. 依次计算每个滞后
    for h in range(n):
        s = 0.0
        # 累加 (X[t+h]-mu)*(X[t]-mu)
        for t in range(n - h):
            s += (arr[t + h] - mu) * (arr[t] - mu)
        # 除以 var(若 var==0 则定义 rho=0 避免除零)
        rho = s / var if var != 0 else 0.0
        # 保留三位小数
        res.append(round(rho, 1))
    return res
if __name__ == "__main__":
    data = list(map(float, input().split()))
    ac = autocorr(data)
    print(ac)
        给定一个时间序列数据,你的任务是计算并输出该序列的自相关函数。自相关函数的定义如下:
对于一个时间序列{Xt},其自相关函数ρ(h)定义为:
ρ(h)=σ2E[(Xt+h−μ)(Xt−μ)]
其中,E[⋅]表示期望,μ是序列的均值,σ2是序列的方差,h是滞后(lag)。
你需要写一个Python函数,接受一个由浮点数构成的列表作为输入,输出一个列表,列表中的第i个元素是输入序列的滞后i的自相关系数。你可以假设输入列表的长度至少为2,且所有的输入数据都是有效的。
输入一行浮点数,空格间隔。
直接输出列表
1.你的程序需要能够处理任意长度的输入序列。
2.对于滞后大于序列长度的情况,自相关系数应被定义为0。
3.所有的输出应该保留一位小数。
输入
1.0 2.0 3.0 4.0
输出
[4.0, 1.0, -1.2, -1.8]