在python中,如何找到两个矩阵之间的相关系数?
我有两个矩阵,比如T1和T2,每个都是mxn大小。我想找出两个矩阵之间的相关系数在python中,如何找到两个矩阵之间的相关系数?,python,numpy,matrix,correlation,Python,Numpy,Matrix,Correlation,我有两个矩阵,比如T1和T2,每个都是mxn大小。我想找出两个矩阵之间的相关系数 到目前为止,我还没有为它使用任何内置的库函数。我正在为此执行以下步骤: 首先,我计算两个矩阵的平均值: M1 = T1.mean() M2 = T2.mean() A = np.subtract(T1, M1) B = np.subtract(T2, M2) 然后我从相应的矩阵中减去平均值,如下所示: M1 = T1.mean() M2 = T2.mean() A = np.subtract(T1, M1)
到目前为止,我还没有为它使用任何内置的库函数。我正在为此执行以下步骤:
首先,我计算两个矩阵的平均值:
M1 = T1.mean()
M2 = T2.mean()
A = np.subtract(T1, M1)
B = np.subtract(T2, M2)
然后我从相应的矩阵中减去平均值,如下所示:
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”是平均符号 有人能告诉我我到底在哪里犯的错误吗。你能试试这个吗:
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)
我认为这个函数正是我想要的:
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之间。您想要每个矩阵中同一行之间的相关性吗?还是只想得到
a
中的所有值与B
中的所有值之间的相关性?如果是这样,只需将两个矩阵展平为向量并计算正则相关系数。请参阅edit1,以更深入地了解这个问题。对此并非100%确定,但我认为np.sum(A*B)
实际上可能会做一些与公式中所示不同的事情。我猜第一个是计算两个矩阵相乘后所有元素的和,而后一个是计算每一对值的乘法。也许你可以用两个非常简单的2x2矩阵来检查这一点?它会返回一个矩阵,但我需要一个数字,一个标量值。你能找到任何解决方案吗?你可以通过取[0,1]元素从np.corrcoef(x,y)中的两个向量中得到标量值参见