Как «перебирать» подматрицы в matlab

#arrays #matlab #matrix #braille

#массивы #matlab #матрица #шрифт Брайля

Вопрос:

У меня есть матрица 36×80 в Matlab. Он состоит из массивов 3×2, которые являются символами шрифта Брайля. т.е.

 0 0 0 1 0 1 0 0 .....
0 1 0 0 1 0 0 0 .....
0 1 0 1 0 1 1 1 .....
.....................
  

Где первая подматрица 3×2 представляет букву «p»

 0 0 
0 1
0 1
  

Далее идет «r» и так далее.
И у меня есть многие из этих «шаблонных» матриц 3×2, которые представляют символы Брайля.

Как перевести эту большую матрицу в матрицу английских символов?

Ответ №1:

Вы можете преобразовать эту матрицу в массив ячеек, например:

 Bs = mat2cell(B,repelem(3,size(B,1)/3),repelem(2,size(B,2)/2));
  

Где B ваша исходная матрица.

Вы должны подготовить код Брайля таким же образом, чтобы вы могли сравнить его с вашей матрицей:

 letters = {'p',[0 0;0 1;0 1];'r',[0 1;0 0;0 1]}; % ...and so on for all letters
  

Затем вы можете перебирать Bs :

 txt = char(zeros(size(Bs))); % the result
for k = 1:numel(Bs)
    for l = 1:size(letters,1)
        if isequal(Bs{k},letters{l,2})
            txt(k) = letters{l,1};
            break
        end
    end
end
  

И вот еще один вариант, без преобразования вашей матрицы в массив ячеек:

 BB = reshape(reshape(B,3,[]),3,2,[]);
txt = char(zeros(size(B,1)/3,size(B,2)/2)); % the result
for k = 1:size(BB,3)
    for l = 1:size(letters,1)
        if isequal(BB(:,:,k),letters{l,2})
            txt(k) = letters{l,1};
            break
        end
    end
end
  

Это должно быть быстрее, особенно если у вас много данных.

Комментарии:

1. Большое спасибо, это именно то, что я хотел!