【发布时间】:2019-12-14 23:52:20
【问题描述】:
如这个问题Calculating rolling correlation of pandas dataframes 所示,我需要获取长度为 N 的数组与第二个数组长度 M 中的每个窗口的相关性。
x= np.random.randint(0,100,10000)
y= [4,5,4,5]
corrs = []
for i in range(0,(len(x)-len(y) ) +1):
corrs.append( np.corrcoef(x[i:i+4],y)[0,1] )
我发现的每个与此类似的问题都讨论了如何在 NxK 到 MxK 的矩阵上执行此操作。但是我尝试的那些不适用于一维数据。在链接的问题中,建议翻转熊猫框架,这很慢。有没有更快的计算方法?
上面的代码大约需要 0.4 秒,示例链接中的代码需要 1.6 秒:
corr = x.rolling(4).apply(lambda x: np.corrcoef(x,y)[0,1],raw=False ).dropna(how='all',axis=0)
有没有更有效的方法来做到这一点?
【问题讨论】:
-
到目前为止您尝试过哪些改进?
标签: python performance vectorization correlation