Как "перебрать" подматрицы в matlab
У меня есть матрица 36x80 в 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 .....
.....................
Где первая подматрица 3x2 представляет букву "p"
0 0
0 1
0 1
Далее идет "р" и так далее. И у меня есть много таких "шаблонных" матриц 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
Это должно быть быстрее, особенно если у вас много данных.