【问题标题】:In python, How do we find the Correlation Coefficient between two matrices?在python中,我们如何找到两个矩阵之间的相关系数?
【发布时间】:2017-04-15 18:44:52
【问题描述】:

我有两个矩阵,T1 和 T2,大小均为 mxn。我想找到两个矩阵之间的相关系数
到目前为止,我还没有使用任何内置的库函数。我正在为此执行以下步骤:
首先我计算两个矩阵的平均值为:

M1 = T1.mean()
M2 = T2.mean()

然后我从相应的矩阵中减去平均值:

A = np.subtract(T1, M1)
B = np.subtract(T2, M2)

其中 np 是 numpy 库,A 和 B 是减法后的结果矩阵。
现在,我将相关系数计算为:

alpha = np.sum(A*B) / (np.sqrt((np.sum(A))*np.sum(B)))

但是,我得到的值远远大于 1,根本没有意义。它应该在 0 到 1 之间才能从中获得一些意义。
我也尝试过使用矩阵 A 和 B 的绝对值,但这也没有用。
我也试过用:

np.sum(np.dot(A,B.T)) instead of np.sum(A*B)  

在分子中,但这也没有用。
编辑1:
这是我打算计算的公式:

在此图像中,C 是矩阵之一,T 是另一个矩阵。
'u' 是平均符号。

谁能告诉我我到底在哪里做错了。

【问题讨论】:

  • 你想要每个矩阵中同一行之间的相关性吗?
  • 或者您是否只想获取A 中的所有值与B 中的所有值之间的相关性?如果是这样,只需将两个矩阵展平为向量并计算正则相关系数
  • 请查看edit1以更深入地了解问题
  • 不是 100% 确定这一点,但我认为 np.sum(A*B) 实际上可能会执行公式中显示的其他操作。我猜第一个是在将两个矩阵相乘后计算所有元素的总和,而后者是对每一对值的乘法求和。也许你可以用两个非常简单的 2x2 矩阵来检查?
  • 为确保您被理解,您可以为T1T2 提供一个小示例输入、您的预期输出以及到目前为止的结果。

标签: python numpy matrix correlation


【解决方案1】:

你可以试试这个:

import numpy as np
x = np.array([[0.1, .32, .2, 0.4, 0.8], [.23, .18, .56, .61, .12]])
y = np.array([[2,4,0.1, .32, .2],[1,3,.23, .18, .56]])
pearson = np.corrcoef(x,y)
print(pearson)

【讨论】:

  • 它返回一个矩阵,但我需要一个数字,一个标量值。
  • 您能找到任何解决方案吗?
  • 您可以通过取 [0,1] 元素从 np.corrcoef(x,y) 中的两个向量中获取标量值
【解决方案2】:

嗯,我认为这个功能正在做我想要做的:

def correlation_coefficient(T1, T2):
    numerator = np.mean((T1 - T1.mean()) * (T2 - T2.mean()))
    denominator = T1.std() * T2.std()
    if denominator == 0:
        return 0
    else:
        result = numerator / denominator
        return result

这里的分子计算似乎很棘手,它并不能完全反映上图所示的公式,而分母只是两幅图像标准差的乘积。
但是,结果现在确实有意义,因为结果仅在 0 和 1 之间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2016-03-27
    • 2018-08-31
    • 2021-03-07
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多