2015-05-27 77 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

相關問題