通过将子矩阵分布到三维来重塑矩阵

Reshape matrix by distributing submatrices to third dimension

我有一个很长的 nx3 矩阵。例如,我采用 9x3 矩阵

A =

 8     9     8
 9     2     9
 2     9     6
 9     9     1
 6     5     8
 1     8     9
 3     2     7
 5     4     7
 9     9     7

现在我想重塑它,(将连续的 3x3 子矩阵带到下一个维度)这样,

out(:,:,1) = 
 8     9     8
 9     2     9
 2     9     6
out(:,:,2)
 9     9     1
 6     5     8
 1     8     9
out(:,:,3)
 3     2     7
 5     4     7
 9     9     7

我可以用循环来做到这一点,但我想知道如何向量化这个过程。 我可以单独使用 reshapepermute 吗?

是的,您可以使用 permute and reshape:

A = [...
 8     9     8
 9     2     9
 2     9     6
 9     9     1
 6     5     8
 1     8     9
 3     2     7
 5     4     7
 9     9     7
 3     2     7
 5     4     7
 9     9     7]

n = size(A,2);
B = permute( reshape(A.',n,n,[]), [2 1 3]) %'
%// or as suggested by Divakar
%// B = permute( reshape(A,n,n,[]), [1 3 2]) 

out(:,:,1) =

     8     9     8
     9     2     9
     2     9     6

out(:,:,2) =

     9     9     1
     6     5     8
     1     8     9

out(:,:,3) =

     3     2     7
     5     4     7
     9     9     7

out(:,:,4) =

     3     2     7
     5     4     7
     9     9     7

这可能是一种方法 -

N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])

这个优点是避免了 中使用的转置。

样本运行-

A =
     8     9     8
     9     2     9
     2     9     6
     9     9     1
     6     5     8
     1     8     9
     3     2     7
     5     4     7
     9     9     7
out(:,:,1) =
     8     9     8
     9     2     9
     2     9     6
out(:,:,2) =
     9     9     1
     6     5     8
     1     8     9
out(:,:,3) =
     3     2     7
     5     4     7
     9     9     7