matlab - 通过将子矩阵分布到三维来 reshape 矩阵

标签 matlab matrix vectorization reshape

我有一个很长的 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

现在我想 reshape 它,(将连续的 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 吗?

最佳答案

是的,您可以使用 permutereshape :

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

关于matlab - 通过将子矩阵分布到三维来 reshape 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587254/

相关文章:

Python Numpy 数组 Ctypes 指针

arrays - Swift - 在多维数组中搜索重复项 - 数独

python - Scipy LinearOperator dtype 未指定

arrays - 从矩阵中获取每一行的不同列

r - 向量串联函数结果上不需要的排序行为

algorithm - 在Matlab中转换矩阵的相邻元素

matlab - 神经网络的输出值

matlab - 将一个向量拆包成 k 个变量

arrays - 在 Matlab 中 L2 归一化 3 维矩阵

matlab - 倍频程/Matlab : vectorising '==' operator?