Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何找到两个矩阵之间的相关系数?_Python_Numpy_Matrix_Correlation - Fatal编程技术网

在python中,如何找到两个矩阵之间的相关系数?

在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)

我有两个矩阵,比如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)
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)中的两个向量中得到标量值参见