我想比较两个DNA序列。但是,我想将第一个蛋白质作为第一个序列,并将其与第二个序列的全长进行比较,依此类推。
E.g。
DNASequence1:ABCDEFGHIJKA
DNASequence2:ABCHIKABTIYO
因此它需要序列A中的第一个蛋白质并将其与第二个序列进行比较,产生两个匹配。然后它需要B并比较它,产生另外两个匹配。等等,直到比较所有蛋白质。
答案 0 :(得分: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