2015-12-08 7 views
0

Я хочу сравнить две последовательности ДНК друг с другом. Тем не менее, я хотел бы взять первый белок для первой последовательности и сравнить его с полной длиной второй последовательности и так далее.Matlab: Сравнение последовательностей ДНК

E.g.

DNASequence1: ABCDEFGHIJKA

DNASequence2: ABCHIKABTIYO

Так он принимает первый белок в последовательности А и сравнивает его с второй последовательности, производя два матча. Затем он берет B и сравнивает его, производя еще два матча. И так далее, пока все белки не сравнились.

+0

Подсказка: Посмотрите, что 'DNASequence2 == DNASequence1 (1)' дает вам. – beaker

+0

Выполняет ли это эту работу? 'sum (~ bsxfun (@ минус, dna1, dna2 '), 1)' – hbaderts

+0

боится не hbaderts. спасибо @beaker, я понимаю результат, который сейчас производит. попробуем придумать код! – user5655305

ответ

2

Вы можете сделать это с помощью цикла, но bsxfun более кратким (и, вероятно, быстрее) и дает те же результаты:

A = 'ABCDEFGHIJKA'; %// I shortened the variable names... 
B = 'ABCHIKABTIYO'; %// because I don't like typing. 

C = bsxfun(@eq, B, A') 

C = 

    1 0 0 0 0 0 1 0 0 0 0 0 
    0 1 0 0 0 0 0 1 0 0 0 0 
    0 0 1 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 1 0 0 0 0 0 0 
    1 0 0 0 0 0 1 0 0 0 0 0 

Каждая строка C является 1, где соответствующий элемент из A происходит в B , Например, строка 9 дает все вхождения буквы I в последовательности B.

Это также работает в тех случаях, когда последовательности имеют разную длину:

>> D = [B B] 
D = ABCHIKABTIYOABCHIKABTIYO 

>> bsxfun(@eq, D, A') 
ans = 

    1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 
    0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 
    0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
    1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 
+0

спасибо. жаль, что у меня был серьезный немой момент раньше! – user5655305