【问题标题】:Compute correlations of several vectors计算几个向量的相关性
【发布时间】:2023-01-14 02:52:05
【问题描述】:

我有几对向量(排列成两个矩阵),我想计算向量它们的成对相关系数(或者,更好的是,它们之间的角度 - 但由于相关系数是它的余弦,我正在使用 numpy.corrcoef):

np.array([np.corrcoef(m1[:,i],m2[:,i])[0,1]
          for i in range(m1.shape[1])])

我想知道是否有一种方法可以对此进行“矢量化”,即避免多次调用corrcoef

【问题讨论】:

    标签: numpy linear-algebra pearson-correlation


    【解决方案1】:

    除了使用 np.corrcoef,您还可以编写自己的函数来执行相同的操作。计算两个向量的相关系数很简单:

    在这里应用:

    def vec_corrcoef(X, Y, axis=1):
        Xm = np.mean(X, axis=axis, keepdims=True)
        Ym = np.mean(Y, axis=axis, keepdims=True)
        N = np.sum((X - Xm) * (Y - Ym), axis=axis)
        D = np.sqrt(np.sum((X - Xm)**2, axis=axis) * np.sum((Y - Ym)**2, axis=axis))
        return N / D
    

    去测试:

    m1 = np.random.random((100, 10))
    m2 = np.random.random(m1.shape)
    
    a = vec_corrcoef(m1, m2)
    b = [np.corrcoef(v1, v2)[0, 1] for v1, v2 in zip(m1, m2)]
    
    print(np.allclose(a, b)) # True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2023-03-21
      • 2015-04-07
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多