Why NUMPY correlate and corrcoef return different values and how to “normalize” a correlate in “full” mode?

前端 未结 2 523
遥遥无期
遥遥无期 2020-12-08 15:38

I\'m trying to use some Time Series Analysis in Python, using Numpy.

I have two somewhat medium-sized series, with 20k values each and I want to check the sliding co

2条回答
  •  南方客
    南方客 (楼主)
    2020-12-08 16:08

    According to this slides, I would suggest to do it this way:

    def cross_correlation(a1, a2):
            lags = range(-len(a1)+1, len(a2))
            cs = []
            for lag in lags:
                idx_lower_a1 = max(lag, 0)
                idx_lower_a2 = max(-lag, 0)
                idx_upper_a1 = min(len(a1), len(a1)+lag)
                idx_upper_a2 = min(len(a2), len(a2)-lag)
                b1 = a1[idx_lower_a1:idx_upper_a1]
                b2 = a2[idx_lower_a2:idx_upper_a2]
                c = np.correlate(b1, b2)[0]
                c = c / np.sqrt((b1**2).sum() * (b2**2).sum())
                cs.append(c)
            return cs
    

提交回复
热议问题