如何在Matlab中"迭代"子矩阵

3

我在Matlab中有一个36x80的矩阵。它由3x2的数组组成,这些数组是盲文符号。例如:

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

下一个是“r”等等。我有许多这些3x2的“模式”矩阵代表盲文符号。如何将这个大矩阵转换成英文字母矩阵?
1个回答

2
你可以将此矩阵转换为一个单元数组,例如:
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

这应该更快,尤其是如果您有大量数据。


非常感谢,这正是我想要的! - Vitali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接