使用索引查找字符串-MATLAB



我有一个字符数组列表,希望根据数值向量chr:中的索引统计子字符串的出现次数

list =
CCNNCCCNNNCNNCN
chr =
     1
     1
     1
     1
     2
     2
     2
     2
     2
     2
     2
     2
     2
     2
     2

通常,我搜索相邻的字符串对,即"NN",并使用这种方法:

Count(:,1) = accumarray(chr(intersect([strfind(list,'CC')],find(~diff(chr)))),1);

使用~diff(chr(来确保模式匹配不会跨越索引边界。

然而,现在我想匹配单字母字符串,即"N"-我如何实现这一点?上面的方法意味着每个索引中的最后一个字母被遗漏并且不被计算在内。

上述示例所需的结果是一个两列矩阵,详细说明每个索引中的"C"one_answers"N"的数量:

C     N
2     2
5     6

即,索引"1"(存储在chr中(中有2C和2N,然后计数从0重新开始到下一个"2",其中有5C和6N。

[u, ~, v] = unique(list);          %// get unique labels for list in variable v
result = full(sparse(chr, v, 1));  %// accumulate combinations of chr and v

这适用于list中任意数量的字母、chr中任意数量索引以及不必排序的chr

在您的示例中

list = 'CCNNCCCNNNCNNCN';
chr = [1 1 1 1 2 2 2 2 2 2 2 2 2 2 2].';

它产生

result =
     2     2
     5     6

result的每列相关联的字母由u:给出

u =
CN

最新更新