2016-10-12 129 views
3

我在Matlab中有36x80矩陣。 它由3x2陣列組成,它們是盲文的符號。即如何在matlab中「迭代」子矩陣

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矩陣。

如何將該大矩陣轉換爲英文字母矩陣?

回答

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 

Thi s應該更快,特別是如果你有很多數據。

+0

非常感謝,這正是我想要的! – Vitali