Вы должны отделить логику генерации матрицы от сравнительно легкой логики создания персонажа.
Сначала определим дельта-функции:
def delta(x,y):
return 0 if x == y else 1
Теперь M[i,j]
:
def M(seq1,seq2,i,j,k):
return sum(delta(x,y) for x,y in zip(seq1[i:i+k],seq2[j:j+k]))
Сделать матрицу этого:
def makeMatrix(seq1,seq2,k):
n = len(seq1)
m = len(seq2)
return [[M(seq1,seq2,i,j,k) for j in xrange(m-k+1)] for i in xrange(n-k+1)]
Участок матрицы. Вы можете экспериментировать с различными персонажами:
def plotMatrix(M,t, seq1, seq2, nonblank = unichr(0x25A0), blank = ' '):
print(' |' + seq2)
print('-'*(2 + len(seq2)))
for label,row in zip(seq1,M):
line = ''.join(nonblank if s < t else blank for s in row)
print(label + '|' + line)
Функция обертка:
def dotplot(seq1,seq2,k = 1,t = 1):
M = makeMatrix(seq1,seq2,k)
plotMatrix(M, t, seq1,seq2) #experiment with character choice
И потом:
#for testing purposes (drawn from paper):
seqx = "ACCTGAGCTCACCTGAGTTA"
seqy = "ACCTGAGCTCACCTGAGTTA"
dotplot(seqx,seqy)
Выход:
|ACCTGAGCTCACCTGAGTTA
----------------------
A|■ ■ ■ ■ ■
C| ■■ ■ ■ ■■
C| ■■ ■ ■ ■■
T| ■ ■ ■ ■■
G| ■ ■ ■ ■
A|■ ■ ■ ■ ■
G| ■ ■ ■ ■
C| ■■ ■ ■ ■■
T| ■ ■ ■ ■■
C| ■■ ■ ■ ■■
A|■ ■ ■ ■ ■
C| ■■ ■ ■ ■■
C| ■■ ■ ■ ■■
T| ■ ■ ■ ■■
G| ■ ■ ■ ■
A|■ ■ ■ ■ ■
G| ■ ■ ■ ■
T| ■ ■ ■ ■■
T| ■ ■ ■ ■■
A|■ ■ ■ ■ ■
Какие матчи фигуру из (хотя ему не хватает ж и столбцов этикетки - которые можно добавить в при желании):
Я добавил код, который я использовал раньше, чтобы создать простую матрицу точек участка. Я хотел бы знать, могу ли я что-то изменить на нем, чтобы астериск присутствовал только на определенном пороге. – Ana
Я только что добавил, но у меня проблемы с публикацией, поскольку вы можете видеть, что не все получают в виде кода. Я несколько раз пробовал. Спасибо за ваше терпение. – Ana
. Скрипт .py Я работал так, надеюсь, копия и вставка должны повредить его. Этот сценарий создал сюжет, где asterisc показывает соответствующие аминокислоты. То, что я хотел бы сделать, это создать аналогичный код или аналогичный график seq1, seq2, k, t (как порог). Что-то похожее на слайд 4 в http://www.cs.unibo.it/~dilena/LabBII/LabBI-I.pdf. Надеюсь, я лучше объясню, что я хотел бы сделать. Большое спасибо за вашу помощь. – Ana