如何在MATLAB中从矩阵创建子矩阵(全5 * 5)?

时间:2019-01-23 14:42:27

标签: matlab matrix matlab-compiler

如何在MATLAB中从矩阵创建子矩阵(全5 * 5)?可以通过只移动一行和一列来完成。我尝试使用以下代码,但未获得实际输出。这里A是输入矩阵。

A=[40 45 50 60 70 80; 
    10 12 15 17 18 20; 
    35 41 57 44 98 78;
    45 74 11 2 36 78;
    12 45 79 85 36 45; 
    1 5 8 78 47 3]

for i=1:size(A,1)-4   
       for j=1:size(A,2)-4      
          B{i,j}=A(i:i+4,j:j+4)        
       end 
     end

现在,我得到以下输出:

A =

   40   45   50   60   70   80
   10   12   15   17   18   20
   35   41   57   44   98   78
   45   74   11    2   36   78
   12   45   79   85   36   45
    1    5    8   78   47    3

B = 
{
  [1,1] =

     40   45   50   60   70
     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36

}
B = 
{
  [1,1] =

     40   45   50   60   70
     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36

  [1,2] =

     45   50   60   70   80
     12   15   17   18   20
     41   57   44   98   78
     74   11    2   36   78
     45   79   85   36   45

}
B = 
{
  [1,1] =

     40   45   50   60   70
     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36

  [2,1] =

     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36
      1    5    8   78   47

  [1,2] =

     45   50   60   70   80
     12   15   17   18   20
     41   57   44   98   78
     74   11    2   36   78
     45   79   85   36   45

  [2,2] = [](0x0)
}
B = 
{
  [1,1] =

     40   45   50   60   70
     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36

  [2,1] =

     10   12   15   17   18
     35   41   57   44   98
     45   74   11    2   36
     12   45   79   85   36
      1    5    8   78   47

  [1,2] =

     45   50   60   70   80
     12   15   17   18   20
     41   57   44   98   78
     74   11    2   36   78
     45   79   85   36   45

  [2,2] =

     12   15   17   18   20
     41   57   44   98   78
     74   11    2   36   78
     45   79   85   36   45
      5    8   78   47    3

}

但是我需要这样的输出:

40   45   50   60   70
10   12   15   17   18
35   41   57   44   98
45   74   11    2   36
12   45   79   85   36


45   50   60   70   80
12   15   17   18   20
41   57   44   98   78
74   11    2   36   78
45   79   85   36   45

10   12   15   17   18
35   41   57   44   98
45   74   11    2   36
12   45   79   85   36
1    5    8   78   47


12   15   17   18   20
41   57   44   98   78
74   11    2   36   78
45   79   85   36   45
5    8   78   47    3

我必须在代码中进行哪些更改?

2 个答案:

答案 0 :(得分:1)

重复显示是由于在您要在'None' is not a valid value for property 'BorderStyle' 中保存子矩阵的行中缺少分号。 您期望的输出需要此索引:

B

,然后您可以使用B{j,i} = A(i:i+4, j:j+4); 显示单元格。

还请在使用celldisp(B)

循环之前预先分配单元格数组

答案 1 :(得分:0)

您已经创建了矩阵的单元格数组,因此为何显示B如此。

尝试这样做:

A=[40 45 50 60 70 80; 
   10 12 15 17 18 20; 
   35 41 57 44 98 78;
   45 74 11 2 36 78;
   12 45 79 85 36 45; 
   1 5 8 78 47 3];

for i=1:size(A,1)-4   
   for j=1:size(A,2)-4      
      B = A(i:i+4,j:j+4);
      disp(B)        
   end 
 end

根据要对每个子矩阵执行的操作,下一步将有所不同。您可以采用的一种方法是将子矩阵保存在具有相关名称的.mat文件中,例如:

save(['B_',num2str(i),'_',num2str(j),'.mat'],'B')

(在我的示例中,将这行放在disp的位置。)