使用索引查找字符串 - MATLAB

时间:2015-08-16 18:22:54

标签: 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和N的数量:

C     N
2     2
5     6

即。指数' 1'中有2C&2和2N? (存储在chr) - 然后计数从0开始重新开始,以便下一个' 2' - 有5C和6N的地方。

1 个答案:

答案 0 :(得分:3)

[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