如何提取一个大矩阵的所有子矩阵

3

我有一个矩阵,如下:

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;

等等,您需要翻译的是:基本上所有可能的3x3矩阵。我该如何做?我必须使用for循环吗?

2个回答

5
如果您拥有 图像处理工具箱,则可以使用函数IM2COL
subMats = im2col(Q,[3 3]);
< p > subMats 的每一列都包含从 Q 中提取出的 3x3 矩阵的元素。可以按照以下方式将这些列中的每一列重新整形为 3x3 矩阵:

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

3
第二部分,您可以在第三个维度上组合所有的3x3矩阵:Z = reshape(permute(subMats,[1 3 2]), 3,3,[]),这样您就可以使用Z(:,:,k)来访问每一个矩阵。 - Amro

0

我猜这是一道作业题(如果不是,请原谅我),以下是一些提示:

  • 绘制您的5x5矩阵结构。
  • 从左上角开始,在该5x5内绘制一个3x3子矩阵。该矩阵覆盖了哪些元素?
  • 转到右上角。那里覆盖了哪些元素?
  • 现在转到左下角。那里呢?

您看到如何覆盖整个矩阵了吗?


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