【问题标题】:Compute correlation coefficient between rows of two matrices计算两个矩阵的行之间的相关系数
【发布时间】:2016-03-23 09:19:47
【问题描述】:

给定 Python 中的两个矩阵 AB,我想找出两个矩阵中的行之间的相关性。矩阵的长度为 5*7。

我想找出AB 中每一行之间的相关性并将相关性平均:

A  = data_All_Features_rating1000_topk_nr ;
B  = data_All_Features_rating1000_leastk_nr ;

corr_1 = corrcoeff(A[0,:],B[0,:]])
corr_2 = corrcoeff(A[0,:],B[1,:]])
corr_3 = corrcoeff(A[0,:],B[2,:]])
corr_4 = corrcoeff(A[0,:],B[3,:]])
corr_5 = corrcoeff(A[0,:],B[4,:]])

corr_6 = corrcoeff(A[1,:],B[1,:]])
corr_7 = corrcoeff(A[1,:],B[2,:]])
corr_8 = corrcoeff(A[1,:],B[3,:]])
corr_9 = corrcoeff(A[1,:],B[4,:]])

corr_10 = corrcoeff(A[2,:],B[2,:]])
corr_11 = corrcoeff(A[2,:],B[3,:]])
corr_12 = corrcoeff(A[2,:],B[4,:]])

corr_13 = corrcoeff(A[3,:],B[3,:]])
corr_14 = corrcoeff(A[3,:],B[4,:]])

corr_14 = corrcoeff(A[4,:],B[4,:]])


corravg = avg(corr_1,corr_2,...,corr_14).

这就是我的工作:

topk = 5 
corr_res = []
p = 0 ;
for i in range(0,topk):
    for j in range(i,topk):
        a = data_All_Features_rating1000_topk_nr[i,:]
        b = data_All_Features_rating1000_leastk_nr[j,:]
        tmp = np.corrcoef(a,b)
        print tmp[0,1]
        corr_res = corr_res.extend(tmp[0,1])  

我收到此错误:

     ---------------------------------------------------------------------------
     TypeError                                 Traceback (most recent call last)
     <ipython-input-159-ab1d737eed71> in <module>()
     22             tmp = np.corrcoef(a,b)
     23             print tmp[0,1]
---> 24             corr_res = corr_res.extend(tmp[0,1])
     25            # print p+1
     26            # print corr_res

     TypeError: 'numpy.float64' object is not iterable

【问题讨论】:

  • 其中一个维度是测试不同的相关指标,如果python支持的话。

标签: python correlation


【解决方案1】:

在 python 中执行矩阵运算的有效方法是使用 NumPy 库。确切的相关计算可能是用户numpy.correlate 函数。要计算您可以使用的所有行组合之间的相关性

import numpy as np
A = np.array([[1, 2, 3, 4], [2, 3, 5, 6], [1,3,4,5], [7,8,2,3]])
B = np.array([[1, 2, 3, 4], [3, 5, 6, 2], [3,2,4,1], [9,8,2,1]])
corr = []
for i in xrange(len(A)):
    for j in xrange(len(B)-i):
        corr.extend(np.correlate(A[i], B[j+i]))
corr_avg = np.average(corr)
print corr_avg
print " ".join(map(str, corr))

更新

代替

print tmp[0,1]
corr_res = corr_res.extend(tmp[0,1])

试试

print tmp[0,0]
corr_res.append(tmp[0,0])

list 方法 extend 在输入上采用可迭代对象(如其他列表、元组等)。如果你想添加到list 标量值,你应该使用append 方法。

【讨论】:

  • 谢谢。好的。但是,我认为您正在计算具有相同索引的两个矩阵中的两行之间的相关性。就我而言,我正在寻找所有行组合之间的相关性。我认为应该修改循环的索引,
  • @Yas 您能否在问题中添加关于输入数据示例的问题的简短描述?
猜你喜欢
  • 2021-03-07
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2015-07-20
相关资源
最近更新 更多