将单个时间序列与大量时间序列相关联

时间:2015-06-23 06:08:47

标签: python performance numpy correlation

我有大量(M)时间序列,每个时间点都有N个时间点,存储在MxN矩阵中。然后我还有一个单独的时间序列,其N个时间点我想与矩阵中的所有时间序列相关联。

一个简单的解决方案是逐行遍历矩阵并运行numpy.corrcoef。但是,我想知道是否有更快或更简洁的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

让我们使用这个correlation公式:

enter image description here

您可以将X作为M x N数组实现此目标,将Y作为N元素的其他单独时间序列数组实现correlated { {1}}。因此,假设XX分别为YA,矢量化实现看起来像这样 -

B

验证结果 -

import numpy as np

# Rowwise mean of input arrays & subtract from input arrays themeselves
A_mA = A - A.mean(1)[:,None]
B_mB = B - B.mean()

# Sum of squares across rows
ssA = (A_mA**2).sum(1)
ssB = (B_mB**2).sum()

# Finally get corr coeff
out = np.dot(A_mA,B_mB.T).ravel()/np.sqrt(ssA*ssB)
# OR out = np.einsum('ij,j->i',A_mA,B_mB)/np.sqrt(ssA*ssB)