Matlab:DNA序列比较
Matlab: DNA Sequence Comparison
我想比较两个 DNA 序列。但是,我想获取第一个序列的第一个蛋白质并将其与第二个序列的全长进行比较,依此类推。
例如
DNA 序列 1:ABCDEFGHIJKA
DNA 序列 2:ABCHIKABTIYO
因此它采用序列 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
我想比较两个 DNA 序列。但是,我想获取第一个序列的第一个蛋白质并将其与第二个序列的全长进行比较,依此类推。
例如
DNA 序列 1:ABCDEFGHIJKA
DNA 序列 2:ABCHIKABTIYO
因此它采用序列 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