matlab中的字符串"交叉相关"

use*_*2pi 2 matlab cross-correlation

假设我有2个字符串:

AACCCGGAAATTTGGAATTTTCCCCAAATACG

CGATGATCGATGAATTTTAGCGGATACGATTC
Run Code Online (Sandbox Code Playgroud)

我想找到我应该多少移动第二个字符串,使其与第一个字符串最匹配.

有2例.第一个是我们假设字符串被缠绕,第二个是我们没有.

是否有一个matlab函数返回N个数组或2N + 1个值数组,以确定移位的字符串2与字符串1的相关程度?

如果没有,是否有更快/更简单的方法

result = zeroes(length, 1)
for i = 0:length-1
    result(i+1) = sum (str1 == circshift(str2, i));
end
Run Code Online (Sandbox Code Playgroud)

Sha*_*hai 5

您可以将每个char转换为大小为4的二进制列:

A -> [1;0;0;0]
C -> [0;1;0;0]
G -> [0;0;1;0]
T -> [0;0;0;1]
Run Code Online (Sandbox Code Playgroud)

结果,一串长度n变为大小为4-by- 的二进制矩阵n.

您现在可以交叉关联(仅限X轴)2 n-by-4和m-by-4以获得结果.