在矩阵的每一行中添加最大值

时间:2015-06-01 17:40:56

标签: python matrix

我有以下代码

 #!/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这样的字符串。

1 个答案:

答案 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)