2015-05-27 76 views
0

我有2个单元格阵列,它们是“celldata”和“data”。他们都在里面存储字符串。现在我想检查“celldata”中的每个元素是否在“数据”中?例如,celldata = {'AB'; '是'; 'BC'}和数据= {'ABCD''BCDE''ACBE''ADEBC'}。我希望预期的输出将是s = 3,对于AB来说,v = 1,对于BE来说s = 2和v = 2,对于BC来说s = 2和v = 2,因为我只需要计算字符串的序列'celldata'在另一个单元格阵列matlab中的一个单元格阵列中计数项目

我写的代码如下所示。任何帮助肯定会受到赞赏。 我的代码:

s=0; support counter 
v=0; violate counter 
SV=[]; % array to store the support 
VV=[]; % array to store the violate 

pairs = ['AB'; 'BE'; 'BC'] 
%celldata = cellstr(pairs) 
celldata = {'AB'; 'BE'; 'BC'} 
data={'ABCD' 'BCDE' 'ACBE' 'ADEBC '} % 3 AB, 2 BE, 2 BC 

for jj=1:length(data) 
    for kk=1:length(celldata) 

res = regexp(data(jj),celldata(kk)) 

m = cell2mat(res); 
e=isempty(m) % check res array is empty or not 
if e == 0 
    s = s + 1; 
    SV(jj)=s; 
    v=v; 
else 
    s=s; 
    v= v+1; 
    VV(jj)=v; 
end 
    end 
end 
+0

对不起,什么是's'和'v'?我在他们的关系中没有看到韵律或理由? – user1543042

+0

s表示序列“AB”出现在单元阵列“data = {'ABCD''BCDE''ACBE''ADEBC'}”中的支持程度。在这种情况下,我们有3个“AB”序列(在这里“ACBE”可以被计为包括1个“AB”)因此,s是3 – kgk

+0

好的,但是你没有解释什么是支持。在你的领域中,是'A'还是'B'出现的字符串的数量?你还没有解释'v'是什么。是'v = 4 - s'? – user1543042

回答

0

如果我理解正确的变量,s是其子ABAE和,BC不会出现,v细胞的数量是它的次数。如果这是正确的,然后

v = cellfun(@(x) length(cell2mat(strfind(data, x))), celldata); 
s = numel(data) - v; 

v = [1;1;3]; 
s = [3;3;1]; 
+0

对于这些用“AB”来计数? “ABCD”,“ACBE”,“ADEBC”,“BACD”,“EBDA”。支持是“A”和“B”出现,而'A'在'B'之前,如果这两个条件都满足,在这种情况下s = 4。谢谢 – kgk

+0

谢谢!看起来你的代码与我的意图不符,但你非常友善:) – kgk

相关问题