我有两个矩阵说,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)
在分子中,但也没有用。
EDIT1:
这是我打算计算的公式:
在此图像中,C是矩阵之一,T是另一个矩阵 '你'是平均符号。
有人可以告诉我实际上我在做错的地方。
答案 0 :(得分:1)
我觉得这个功能正在做我想要的事情:
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之间。
答案 1 :(得分:0)
你可以试试这个:
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)