2016-12-28 11 views
0

у меня есть клетка, как это:определение числа появления шаблона внутри ячейки в Matlab?

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

Ваша ячейка 'x' выглядит как шестнадцатеричное значение, правильно? будет легче распознать шаблон, если эта ячейка была массивом десятичного числа. – obchardon

+0

да, но мне нужно найти этот шаблон среди шестнадцатеричных значений – lighting

ответ

0

Ваш пример кода имеет несколько вопросов - в первую очередь, я не верю, что вы делаете какие-либо операции сравнения, которые будут необходимы для выявления возникновения рисунка в данные поиска (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) 
+0

, поэтому, если я хочу найти шаблон с 4 строками, я должен написать, как found_locations = found_locations (mod (found_locations, 4) == 1) ;? – lighting

+0

Да, это правильно. Вы можете переписать мой код в следующей форме, чтобы сделать его более гибким: 'found_locations = found_locations (mod (found_locations, length (pattern)) == 1);' – 4Oh4

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); 
+0

Спасибо! Это работа – lighting

 Смежные вопросы

  • Нет связанных вопросов^_^