在MATLAB中,通过在k列之后拆分矩阵来重塑矩阵形状



假设我有一个矩阵,我们称它为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的整形命令以多种方式来做这件事,但我失败了。感谢您的帮助。如果重要的话,我的原始数据会更大。是(21080(。谢谢

我不相信你能在一个命令中做到这一点,但也许有人会纠正我的错误。如果速度不是一个大问题,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

您可能需要阅读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. 

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

以下是使用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张量。最后的CCD_ 8命令然后将3D张量转换为维度为CCD_ 9的矩阵。

看看每个阶段的结果可能会让你更好地了解正在发生的事情。

相关内容

  • 没有找到相关文章

最新更新