假设我有一个矩阵,我们称它为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)。谢谢。
答案 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)