文本搜索 矩阵重建,文本矩阵重建,简述:一个含有如下格式的


简述:

一个含有如下格式的文本文件:name.txt,一共line=2000行

at1g12

at1g34

at2g52

.....

2.一个文件夹,含有n个文本,n = 20000。每个文本的名字格式如上述内容,如at2g52、at3g46,....;每个文本中含有2列,第一列仍为相同格式的名字,如at2g12,.....,第二列为相关系数。每个文本内有2万行。

object:对name.txt中的所有名字,构建一个2000 x 2000的矩阵,矩阵元素为相关系数。

目前用下面代码可实现(用line=10时测试成功,很快)

# -*-coding:utf-8 -*-# by csanmum# 程序思路:先构建一个方阵,再更改方阵中的元素,最后写入文本输出# 存在问题:当 line = 2k时,很久都不出结果。# 估计问题存在点:三个for循环(for循环本身很慢)import timestart_time = time.clock()import os,re,os.path,glob,networkx,numpyos.chdir("D:\\\\folder\\\\")file_list = glob.glob("*")def get_content(filename):    content = open(filename).readlines()    content_new = []    for e in content:        e = e.rstrip("\\n")        content_new.append(e)    return content_newcon_list = get_content("D:\\\\name.txt")print len(con_list) # 2000 #create an square matrix, the element in diag are 1,others are 0;my_matrix = numpy.identity(len(con_list))for i in range(0,len(con_list)-1):       e = con_list[i].capitalize()    if e in file_list:  # 2w file        pcc_list = get_content(e)        for j in range(i+1,len(con_list)):            for ea in pcc_list:                eb = ea.split("\\t")                if con_list[j].capitalize() == eb[0]:                    my_matrix[i,j] = my_matrix[j,i] = eb[2]    else:        print "do not find this file: ",enumpy.savetxt("E:\\\\matrix.txt",my_matrix,"%5.3f")end_time = time.clock()print "cost time: ",(end_time - start_time)#该片段来自于http://byrx.net

评论关闭