Python:在矩阵中更改行和列

时间:2018-11-02 22:34:30

标签: python python-3.x matrix

UITableView

输出:

matrix = []
for index, value in enumerate(['A','C','G','T']):
    matrix.append([])
    matrix[index].append(value + ':')
    for i in range(len(lines[0])):
        total = 0
        for sequence in lines:
            if sequence[i] == value:
               total += 1
        matrix[index].append(total)

unity = ''
for i in range(len(lines[0])):
  column = []
  for row in matrix:
    column.append(row[1:][i])
  maximum = column.index(max(column))
  unity += ['A', 'C', 'G', 'T'][maximum]
print("Unity: " + unity)

for row in matrix:
    print(' '.join(map(str, row)))

通过此代码,我得到了这个矩阵,但是我想像这样形成矩阵:

Unity: GGCTACGC
A: 1 2 0 2 3 2 0 0
C: 0 1 4 2 1 3 2 4
G: 3 3 2 0 1 2 4 1
T: 3 1 1 3 2 0 1 2

但是我不知道如何。我希望有一个人可以帮助我。已经感谢您的回答。

顺序为:
AGCTACGT
TAGCTAGC
TAGCTACG
GCTAGCGC
TGCTAGCC
GGCTACGT
GTCACGTC

2 个答案:

答案 0 :(得分:1)

您需要对矩阵进行转置。我在下面的代码中添加了注释,以说明为制作表格所做的更改。

matrix = []
for index, value in enumerate(['A','C','G','T']):
    matrix.append([])

    # Don't put colons in column headers
    matrix[index].append(value)
    for i in range(len(lines[0])):
        total = 0
        for sequence in lines:
            if sequence[i] == value:
               total += 1
        matrix[index].append(total)

unity = ''
for i in range(len(lines[0])):
  column = []
  for row in matrix:
    column.append(row[1:][i])
  maximum = column.index(max(column))
  unity += ['A', 'C', 'G', 'T'][maximum]

# Tranpose matrix
matrix = list(map(list, zip(*matrix)))

# Print header with tabs to make it look pretty
print( '\t'+'\t'.join(matrix[0]))

# Print rows in matrix
for row,unit in zip(matrix[1:],unity):
    print(unit + ':\t'+'\t'.join(map(str, row)))

将打印以下内容:

    A   C   G   T
G:  1   0   3   3
G:  2   1   3   1
C:  0   4   2   1
T:  2   2   0   3
A:  3   1   1   2
C:  2   3   2   0
G:  0   2   4   1
C:  0   4   1   2

答案 1 :(得分:0)

我认为最好的方法是将矩阵转换为pandas数据框,然后使用转置函数。 docs