在matlab中查找单元格中模式的出现次数?

时间:2016-12-28 12:20:03

标签: matlab cell

我有这样一个单元格:

x = {'3D'
    'B4'
    'EF'
    'D8'
    'E7'
    '6C'
    '33'
    '37'} 

让我们假设单元格是1000x1。我想在此单元格中找到pattern = [30;30;64;63]的出现次数,但是显示顺序。换句话说,它是第一次检查x{1,1},x{2,1},x{3,1},x{4,1} 然后检查x{2,1},x{3,1},x{4,1},x{5,1}并像这样直到单元格结束并返回它的出现次数。

这是我的代码,但它不起作用!

while (size (pattern)< size(x))
    count = 0;
    for i=1:size(x)-length(pattern)+1
        if size(abs(x(i:i+size(pattern)-1)-x))==0
            count = count+1;
        end
    end
end

2 个答案:

答案 0 :(得分:0)

使用字符串查找功能。 这是一个快速而简单的解决方案:

clear
str_pattern=['B4','EF'];  %same as str_pattern=['B4EF'];
x = {'3D'
    'B4'
    'EF'
    'D8'
    'EB'
    '4E'
    'F3'
    'B4'
    'EF'
    '37'} ;
str_x=horzcat(x{:});
inds0=strfind(str_x,str_pattern); %including in-middle
inds1=inds0(bitand(inds0,1)==1); %exclude all in-middle results

disp(str_x);
disp(str_pattern);
disp(inds0);
disp(inds1);

答案 1 :(得分:0)

您的示例代码有几个问题 - 最重要的是我不相信您正在进行任何比较操作,这对于识别搜索数据中模式的出现是必要的( x ) 。此外, x 模式之间存在可变类型不匹配 - 一个是字符串的单元格数组,另一个是十进制数组。

解决此问题的一种方法是将 x pattern 重组为字符串,然后使用 strfind 查找模式的出现次数。只有在任一变量中没有丢失数据时,此方法才有效。

x = {'3D';'B4';'EF';'D8';'E7';'6C';'33';'37';'xE';'FD';'8y'};
pattern = {'EF','D8'};

collated_x=[x{:}];
collated_pattern = [pattern{:}];
found_locations = strfind(collated_x, collated_pattern);

% Remove 'offset' matches that start at even locations
found_locations = found_locations(mod(found_locations,2)==1);

count = length(found_locations)