【发布时间】:2014-06-15 03:59:23
【问题描述】:
我想计算两个数组a和b之间的相关性; a 和 b 的形状是 (10, 2)。我期望一个形状为(10, 10) 的相关矩阵,其值在[-1, 1] 范围内;每对的相关值。
>>> a
array([[-1.22674504, 0.08136256],
[ 1.95456381, -1.31209914],
[ 0.29199221, 0.00573356],
[ 0.66700798, -0.68239164],
[-1.03723395, -0.15456914],
[-0.52541249, -0.21180142],
[-0.94584861, -0.81954194],
[ 1.11044632, 2.02689438],
[-0.12003807, 0.00595059],
[-0.16873215, 1.06046219]])
>>> b
array([[-0.06960341, 0.01320213],
[ 0.1108986 , -0.21290515],
[ 0.01656714, 0.00093034],
[ 0.03784489, -0.11072692],
[-0.05885088, -0.02508085],
[-0.029811 , -0.03436753],
[-0.05366583, -0.13298134],
[ 0.06300482, 0.32888998],
[-0.00681075, 0.00096556],
[-0.00957357, 0.17207378]])
我使用numpy.corrcoef(a, b) 并得到一个(20, 20) 矩阵,而不是(10, 10)。
>>> numpy.corrcoef(a, b)
array([[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[-1., 1., 1., 1., -1., -1., -1., -1., -1., -1., -1., 1., 1.,
1., -1., 1., 1., -1., -1., -1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.],
[ 1., -1., -1., -1., 1., 1., 1., 1., 1., 1., 1., -1., -1.,
-1., 1., -1., -1., 1., 1., 1.]])
一行是一个具有两个值的观察值,我如何告诉 Python 计算相关性是二维的?为什么每个值都是 -1 或 1?
【问题讨论】:
-
你真正想做什么?
corrcoef计算rows之间的系数。所以np.all(np.corrcoef(a, b) == np.corrcoef(np.vstack((a, b)))) == True -
我想计算每对 a 和 b 的相关性。得到一个 10x10 的矩阵,entry_11 代表 a(第一行)的 element#1 和 b(第一行)的 element#1。这怎么可能?我尝试了 scipy.signal.correlated2d(a,b) 但结果与预期不符。
标签: python numpy multidimensional-array correlation