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
答案 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)