如何提取更大的子矩阵

时间:2010-09-20 15:47:20

标签: matlab matrix

我有一个矩阵说:

Q = [05 11 12 16 25;
     17 18 02 07 10;
     04 23 20 03 01;
     24 21 19 14 09;
     06 22 08 13 15]

我想列出所有可能的3x3矩阵。一些例子是:

11 12 16;
18  2  7;
23 20  3

 5 11 12;
17 18  2;
 4 23 20;

等。基本上所有可能的3乘3矩阵。 我该怎么做?我必须使用for循环?

2 个答案:

答案 0 :(得分:5)

如果您拥有Image Processing Toolbox,则可以使用IM2COL功能:

subMats = im2col(Q,[3 3]);

subMats的每一列都包含从Q中提取的3乘3矩阵的元素。这些列中的每一列都可以重新整形为3×3矩阵,如下所示:

Q1 = reshape(subMats(:,1),[3 3]);  %# Reshape column 1 into a 3-by-3 matrix

答案 1 :(得分:0)

我猜这是作业(如果没有,请原谅我),所以这里有一些提示。

  • 绘制5x5矩阵的结构。
  • 从左上角开始,在5x5内绘制一个3x3子矩阵。该矩阵涵盖的要素是什么?
  • 转到右上角。那里有哪些元素?
  • 现在转到左下角。那怎么样?

你看到如何涵盖整个事情吗?