【问题标题】:numpy.corrcoef() doubts about return valuenumpy.corrcoef() 对返回值的质疑
【发布时间】:2020-08-16 19:49:27
【问题描述】:

我需要两个矩阵 X,Y 之间的皮尔逊相关系数。 如果我运行代码corr=numpy.corrcoef(X,Y) 我的输出是一个具有相关系数的矩阵。 但是我需要一个值来表示两个矩阵之间的相关性。

我刚刚在这个 kennytm 的 answer 上看到,要拥有一个值,我应该写 numpy.corrcoef(X,Y)[1,0]

此解决方案有效,但我不明白方括号内的数字是什么意思以及为什么添加它们作为结果我只有一个值。

我将 1 和 0 解释为系数的限制,但矩阵内的所有系数会发生什么变化? 对它们计算什么类型的操作以获得单个值? 如果我更改方括号内的数字,例如 [1,-1](correlation, anticorrelation),corr 的值会发生变化,所以我很困惑应该在括号内使用哪些数字。

【问题讨论】:

  • [1,0] 正是 Python 中索引的工作方式。当您执行corrcoef(X,Y) 时,输出是一个大小由输入数组大小决定的数组。要访问此类数组的某个元素,请使用方括号。更一般地,[i,j] 指的是第 i 行第 j 列中的元素。 -1 用于索引沿某个轴的最后一个元素。

标签: python-3.x numpy correlation pearson-correlation


【解决方案1】:

numpy.corrcoef 返回一个矩阵,其中包含每对行的相关系数。例如,numpy.corrcoef(A,B) for A.shape=(3,3)B.shape=(3,3) 将返回一个 (6,6) 矩阵,因为有 36 行组合。请注意,它是一个对称矩阵,因为它返回(例如)A[1],B[1](索引[1,4])和B[1],A[1](索引[4,1])的相关性。当您有两个一维数组时,您会得到一个(2,2) 矩阵:第一个数组与自身的相关性[0,0],第一个数组与第二个数组的相关性[0,1],第二个数组与第一个数组[1,0] 和第二个数组与自身的相关性[1,1]

import numpy as np
A = np.random.randint(low=0, high=99, size=(3,3))
B = np.random.randint(low=0, high=99, size=(3,3))
C = np.corrcoef(A,B)
print(C[1,4]==np.corrcoef(A[1],B[1])[0,1]) # True

如果您想要二维相关性(如图像之间的相关性),请展平二维数组,以便为​​每个数组获取单行。然后,该相关矩阵的元素[0,1][1,0] 将是二维数组如何相互完全相关。

print(np.corrcoef(A.flatten(), B.flatten())[0,1])

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2020-08-01
    • 2015-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多