在MATLAB中将长字符串拆分为子字符串的最有效方法

我正在研究MATLAB中的一个函数,它比较两个基因序列并确定它们的相似性.为此,我将两个序列分成较小的子串,通过使用for循环移动它们,一次移动一个核苷酸并将子串添加到单元阵列中.

因此,例如,子串长度为4的字符串ATGCAAAT不会被拆分为

ATGC,AAAT

而是作为

ATCG,TGCA,GCAA,CAAA,AAAT

我试图更快地执行该函数,并且由于这两个for循环几乎占用了90%的执行时间,我想知道在MATLAB中是否会有更快的方法来执行此操作.

这是我目前使用的代码:

 SubstrSequence1 = {};                                                
 SubstrSequence2 = {};
 for i = 1:length(Sequence1)-(SubstringLength-1)                
     SubstrSequence1 = [SubstrSequence1, Sequence1(i:i+SubstringLength-1)];
 end

 for i = 1:length(Sequence2)-(SubstringLength-1)                
     SubstrSequence2 = [SubstrSequence2, Sequence2(i:i+SubstringLength-1)]; 
 end
最佳答案
这个怎么样?

str = 'ATGCAAAT';
n = 4;
strs = str(bsxfun(@plus, 1:n, (0:numel(str)-n).'));

结果是一个2D char数组:

strs =
ATGC
TGCA
GCAA
CAAA
AAAT

所以部分字符串是strs(1,:),strs(2,:)等.

如果你想把结果作为字符串的字符串arrray,最后添加:

strs = cellstr(strs);

生产

strs = 
    'ATGC'
    'TGCA'
    'GCAA'
    'CAAA'
    'AAAT'

然后部分字符串是strs {1},strs {2}等.

转载注明原文:在MATLAB中将长字符串拆分为子字符串的最有效方法 - 代码日志