通过在MATLAB中的k列后拆分矩阵来重塑矩阵

时间:2018-12-02 16:56:33

标签: matlab matrix

假设我有一个矩阵,我们称它为A,如下所示:

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

我想将其重塑成这样的矩阵:

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

所以,基本上,我想做的是MATLAB首先读取一个大小为(2,5)的块,然后将剩余的矩阵拆分到下一行,然后重复此过程,以此类推,直到得到类似在我的示例中。

我尝试以多种方式使用MATLAB的reshape命令执行此操作,但失败了。任何帮助表示赞赏。以防万一,我的原始数据更大。是(2,1080)。谢谢。

3 个答案:

答案 0 :(得分:1)

我不相信您可以通过一个命令来完成此操作,但是也许有人会纠正我。如果速度不是一个大问题,那么for循环应该可以正常工作。

或者,您可以通过重塑A的每一行,然后将结果放入新矩阵的其他每一行中来获得结果。这同样适用于较大的数据。

A = [1     2     3     4     5     1     2     3     4     5
     0     2     4     6     8     1     3     5     7     9];
An = zeros(numel(A)/5, 5);               % Set up new, empty matrix
An(1:2:end,:) = reshape(A(1,:), 5, [])'; % Write the first row of A to every other row of An
An(2:2:end,:) = reshape(A(2,:), 5, [])'  % Write second row of A to remaining rows

An =

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

答案 1 :(得分:1)

您可能需要阅读Matlab文档中有关索引的更多信息。

对于您的示例,很容易执行以下操作

A=[1 2 3 4 5 1 2 3 4 5; 0 2 4 6 8 1 3 5 7 9]
a1=A(:,1:5); % extract all rows, and columns from 1 to 5
a2=A(:,6:end); % extract all rows, and columns from 6 to end 
B=[a1;a2] % construct a new matrix. 

构建某种循环来提取其余部分并不困难。

答案 2 :(得分:1)

您可以使用reshapepermute命令在一行中完成此操作:

B = reshape(permute(reshape(A,2,5,[]), [1,3,2]), [], 5);

reshape(A,2,5,[])命令将您的A矩阵重塑为尺寸为2 x 5 x nblocks的三维张量,其中nblocks是A在水平方向上的块数。然后,permute命令交换此3D张量的第二维和第三维,以使其成为2 x nblocks x 5张量。然后,最后的reshape命令将3D张量转换为尺寸为(2*nblocks) x 5的矩阵。

在每个阶段查看结果都可以使您更好地了解正在发生的事情。