我有一个字符数组列表,希望根据数值向量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