Python: изменение строки и столбца в матрице - PullRequest
0 голосов
/ 03 ноября 2018
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

С этим кодом я получаю эту матрицу, но я хочу сформировать матрицу следующим образом:

   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

Но я не знаю как. Я надеюсь, что кто-то может помочь мне. Спасибо уже за ответы.

Последовательности:
AGCTACGT
TAGCTAGC
TAGCTACG
GCTAGCGC
TGCTAGCC
GGCTACGT
GTCACGTC

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вам нужно сделать транспонирование вашей матрицы. Я добавил комментарии в коде ниже, чтобы объяснить, что было изменено для создания таблицы.

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
0 голосов
/ 03 ноября 2018

Я думаю, что лучший способ - это преобразовать вашу матрицу в кадр данных pandas и затем использовать функцию транспонирования. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.transpose.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...