Matlab:DNA序列比较
我想比较两个DNA序列。但是,我想取第一个序列的第一个蛋白质,并将其与第二个序列的全长进行比较,依此类推 例如 DNASequence1:ABCDEFGHIJKA DNA序列2:ABCHIKABTIYOMatlab:DNA序列比较,matlab,dna-sequence,Matlab,Dna Sequence,我想比较两个DNA序列。但是,我想取第一个序列的第一个蛋白质,并将其与第二个序列的全长进行比较,依此类推 例如 DNASequence1:ABCDEFGHIJKA DNA序列2:ABCHIKABTIYO 因此,它获取序列A中的第一个蛋白质,并将其与第二个序列进行比较,产生两个匹配。然后取B并比较,产生另外两个匹配项。依此类推,直到所有的蛋白质都进行了比较。你可以通过一个循环来实现这一点,但是bsxfun更简洁(可能更快),并且给出了相同的结果: A = 'ABCDEFGHIJKA'; %//
因此,它获取序列A中的第一个蛋白质,并将其与第二个序列进行比较,产生两个匹配。然后取B并比较,产生另外两个匹配项。依此类推,直到所有的蛋白质都进行了比较。你可以通过一个循环来实现这一点,但是
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
提示:看看
DNASequence2==DNASequence1(1)
给了你什么。这样做行吗<代码>总和(~bsxfun(@减号,dna1,dna2'),1)恐怕不是hbaderts。谢谢@bicker,我理解现在产生的结果。我会尝试现在就想出一些代码!另一个提示:您可能希望将bsxfun
与@eq
一起使用。在beaker处有进一步的线索吗?如果可能的话,我想把它设置成某种形式的环,因为两个序列的DNA长度可以是15,另一个序列的DNA长度可以是20。谢谢。对不起,我刚才真的很傻!