矩陣

2015-06-01 43 views
0

我有以下代碼矩陣

#!/usr/bin/python 
    import sys 
    import re 
    import string 
    indexfile="ABC.txt" 
    for line in open(indexfile,'rU').xreadlines(): 
    t = string.split(line,'\t') 
    id = t[0]; 
    gene=t[1]; 
    pwmfile=id+'.txt' 
    matrix_file = open(pwmfile, "rU") 
    matrix = matrix_file.readlines() 
    vals = [line[1:] for line in matrix[1:]] 
    newpwmfile=id+'_formated.txt' 
    ea=open(newpwmfile,'w') 
    ea.seek(0) 
    ea.write(">"+"ASTTCCTCTT "+gene) 
    ea.writelines([line.lstrip('\t') for line in vals]) 
    ea.close() 

和下面的每一行中添加了最大值爲基質,我得到:

>ABC/EFG 
    0 0 1 0 
    0.53333333333333 0 0.13333333333333 0.33333333333333 
    0.2 0 0 0.8 
    0.33333333333333 0 0 0.66666666666667 
    0 1 0 0 
    0 0.86666666666667 0.13333333333333 0 
    0.33333333333333 0.066666666666667 0 0.6 
    0 0 1 0 

我想找出最大值從每一行中除以0.25並對每行進行總計。另外,我想要得到一個字符串,爲字符串中的每個位置分配字母,例如,如果最大值在該行的第三列,則爲G,對於第二行中的第一列,然後G等並將它們連接起來,這樣我得到一個像GAUUCCCG這樣的字符串在相同的t找到每一行中的最高分數。

+0

你可以使用標準庫讀入你的文件嗎? – canyon289

+0

@ canyon289:對不起,我沒有得到你。 – AishwaryaKulkarni

回答

1
import numpy as np 

#make some fake data 
m = np.random.random((8,4)) 

#get the sum you described 
print 0.25*np.max(m, axis=1).sum() 

#next, get the index the max value, for each row 
xs = np.argmax(m, axis=1) 
#use these as indexes into a string, e.g. 
s = "GAUC" 
print "".join(s[x] for x in xs) 
+0

感謝您的代碼,但是當我將它插入到變量'vals'的原始代碼中時,出現以下錯誤:ValueError:'axis'條目超出範圍 – AishwaryaKulkarni

+0

您需要將數據轉換爲2d數組。 (另外,請注意'xreadlines'不再需要遍歷文件的行;這是默認行爲。)嘗試將'vals = [line [1:] for line in matrix [1:]]'改爲' vals = np.array([map(float,line.split()[1:])for line in matrix [1:]])。 – Alan