我有以下代码
#!/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这样的字符串。
答案 0 :(得分: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)