Python中numpy包的使用(更新中)

By | 2016年12月15日

当然,文件的开头都有“import numpy as np”

1.矩阵

 

2.计算皮尔逊相关系数PCC

2.1 输入输出均为整个矩阵

初始矩阵为 matrix,计算结果为邻接矩阵 pcc_matrix。

pcc_matrix = np.corrcoef(matrix)          # 阈值为[-1,1]
pcc_matrix = np.corrcoef(matrix)*0.5+0.5  # 将相关系数矩阵的值域由[-1,1]映射为[0,1]

2.2 输入为两个向量,输出为一个值

暂时没找到numpy包,自己写的:

当数据较小时:

def Compute_PCC(matrix):      # 不直接调用np中计算pcc的函数了,那样计算内存不够
    
    global pcc_list
    pcc_list = []

    global pcc_matrix
    pcc_matrix = [[0 for col in range(row_num)] for row in range(row_num)]  # 初始化pcc邻接矩阵
    
    for i in range(0, row_num):
        
        pcc_matrix[i][i] = 1

        for j in range(i+1, row_num):    # 只用计算上三角就行了
            u = np.array(matrix[i])
            v = np.array(matrix[j])
            
            u_mean = np.mean(u)
            v_mean = np.mean(v)

            numerator = np.mean(u*v)-u_mean*v_mean
            denominator = np.sqrt(np.mean(u*u)-u_mean*u_mean)*np.sqrt(np.mean(v*v)-v_mean*v_mean)

            pcc_value = numerator/denominator
            
            pcc_matrix[i][j] = pcc_value
            pcc_matrix[j][i] = pcc_value
    
    return pcc_matrix

当数据很大时,矩阵可能存不下,那么就计算一个pcc,就写入到文件中。此时,计算结果就只是一个上三角矩阵:

def Compute_PCC(matrix, pcc_file):      # 不直接调用np中计算pcc的函数了,那样计算内存不够
    
    dest = open(pcc_file, 'w')
      
    for i in range(0, row_num):
        
        print i
        dest.write('\t'*i)
        dest.write('1.0'+ '\t')

        for j in range(i+1, row_num):    # 只用计算上三角就行了
            u = np.array(matrix[i])
            v = np.array(matrix[j])
            
            u_mean = np.mean(u)
            v_mean = np.mean(v)

            numerator = np.mean(u*v)-u_mean*v_mean
            denominator = np.sqrt(np.mean(u*u)-u_mean*u_mean)*np.sqrt(np.mean(v*v)-v_mean*v_mean)

            pcc_value = numerator/denominator
            
            dest.write(str(pcc_value) + '\t')
            
        dest.write('\n')
    
    return True

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注