如何提取更大的子矩阵

mee*_*ena 3 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]
Run Code Online (Sandbox Code Playgroud)

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

11 12 16;
18  2  7;
23 20  3
Run Code Online (Sandbox Code Playgroud)

和

 5 11 12;
17 18  2;
 4 23 20;
Run Code Online (Sandbox Code Playgroud)

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

gno*_*ice 5

如果您有图像处理工具箱,则可以使用IM2COL函数:

subMats = im2col(Q,[3 3]);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于第二部分,您可以在第三维中组合所有3乘3矩阵:`Z =重塑(置换(subMats,[1 3 2]),3,3,[])`,以便您可以访问每个都使用`Z(:,:,k)` (3认同)