基本上,我有两个等长的字符串,比如说'AGGTCT'和'AGGCCT'。我想按位置比较他们的位置,并获得他们不匹配时的读数。所以在这里我希望得到1,因为只有1个位置他们在位置4不匹配。如果任何人有位置比较代码的想法,这将帮助我很多开始。Matlab - 如何比较两个字符串的字母?
谢谢!
基本上,我有两个等长的字符串,比如说'AGGTCT'和'AGGCCT'。我想按位置比较他们的位置,并获得他们不匹配时的读数。所以在这里我希望得到1,因为只有1个位置他们在位置4不匹配。如果任何人有位置比较代码的想法,这将帮助我很多开始。Matlab - 如何比较两个字符串的字母?
谢谢!
使用下面的语法来获得不同的字符数为同等大小的字符串:
sum(str1 ~= str2)
如果你想不区分大小写,使用方法:
sum(lower(str1) ~= lower(str2))
表达str1 ~= str2
执行烧焦按字符比较两个字符串,产生与字符串大小相同的逻辑向量,其中true
与它们匹配的地方不匹配(使用~=
)和false
。为了得到你的结果,简单地总结true
值的数量(不匹配)。
编辑:如果要算匹配字符的数量,您可以:
使用“等于” ==
运营商(而不是“不等于” ~=
运营商):
sum(str1 == str2)
减去失配的数量,从该总数:
numel(str1) - sum(str1 ~= str2)
是的,我只是想将不匹配的数目应用于其他目的。 Shai你的代码似乎完美地满足了我的需求。谢谢! – user2180513
假设你想总结'falses'(匹配),你能够在两个字符串中插入其他东西吗? – user2180513
@ user2180513你应该看看[关系运算符](http://www.mathworks.com/help/matlab/matlab_prog/operators.html)。你可以使用'=='比较 – Shai
您可以比较字符串的所有元素:
r = all(seq1 == seq2)
这将炭炭相比较,如果所得数组中的所有元素都为真返回true。如果字符串可以有不同的大小,您可能需要先比较大小。另一种方法是
r = any(seq1 ~= seq2)
另一种解决方案是使用strcmp
:
r = strcmp(seq1, seq2)
您应该使用'strcmp()',因为它允许您比较不同长度的字符串。虽然'seq1 == seq2'假定它们具有相同的长度。即你不能像'John'=='Bob''那样比较它,但你可以使用'strcmp'('John','Bob')'。 – Ufos
只是想指出的是,你要求计算hamming distance(如你要求的替代品 - 文章包含指向一些)。这已经被讨论here。总之内置命令pdist可以做到这一点。
是的,我只是想要出现不匹配的数量以用于其他目的。 – user2180513
好的。那么Shai的回答正是你想要的。 – jonhopkins
我猜你的问题是你正在处理的DNA序列只有4个字符 - A,G,C,T。在这种情况下,我强烈建议将它们表示为双精度编码数组,并且只有在需要将它们展示给用户时才转换为字符串。所有你需要的操作将变得更快更方便 –