我正在执行以下操作:
from numpy import corrcoef
R= corrcoef(X, X, rowvar=False)
其中X
的形状为(M,N)。 (有M
个观察,每个观察都由一个长度为N的向量组成)。我期望得到一个形状为(N,N)的数组,但是我却得到了形状为(2 * N,2 * N)的数组。任何解释将不胜感激。
答案 0 :(得分:0)
每个NxN象限都是一个协方差矩阵。
a3 = corrcoeff(a1,a2,rowvar = False)
a1和a2的大小明显相同。
如果a1和a2相同,您会发现每个象限的对角线都是一个对角线。
如果您只想查看每个变量的变化方式:
a3 = numpy.cov(a1,a1,rowvar=False)[:N,:N]
答案 1 :(得分:0)
是的,由于某种原因,np.cov
和np.corrcoef
都将输入连接在一起,然后总是对连接的数组进行自动协方差。幸运的是,您不能只给出第二个数组,而是将获得第一个参数的自动协方差(由于默认y = None
而已。)
R = corrcoef(X, rowvar = False)
如果您不进行自协方差,那么最好的选择是将scipy.spatial.distance.cdist
与metric = 'correlation'
一起使用,或者只是长时间进行计算:
X_ = X - X.mean(-1)
Y_ = Y - Y.mean(-1)
X_var = np.einsum('ij, ij -> j', X_, X_)
Y_var = np.einsum('ij, ij -> j', Y_, Y_)
R = (X_.T @ Y_) / (X_var[:, None] * Y_var)