在MATLAB中,通过在k列后拆分矩阵来重塑矩阵
假设我有一个矩阵,我们称之为a,如下所示:在MATLAB中,通过在k列后拆分矩阵来重塑矩阵,matlab,matrix,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的重塑命令以几种方式来实现这一点,但失败了。感谢您的帮助。如果有关系,我的原始数据
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 = [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
一个=
您可能需要阅读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.
构建某种循环来提取其余的循环并不困难 这里有一种方法,您可以使用和命令在一行中完成此操作:
B = reshape(permute(reshape(A,2,5,[]), [1,3,2]), [], 5);
重塑(A,2,5,[])
命令将A矩阵重塑为二维2 x 5 x nblocks
的三维张量,其中nblocks
是A在水平方向上的块数。然后,permute
命令交换该三维张量的第二和第三维度,使其成为一个2xnblocks x5
张量。最后一个重塑
命令然后将三维张量转换为尺寸(2*nblocks)x 5的矩阵
查看每个阶段的结果可能会让您更好地了解正在发生的事情。谢谢。(1:2:end,:)是什么意思?我从未见过:在同一个论点中使用了两次。请解释一下好吗?在冒号表示法中,第二个值是步长,例如1:0.5:10
将以0.5的增量给出一组值([1,1.5,2,…,10]
)An(1:2:end)
将从An
矩阵中的第一行开始每隔一行访问一次。您能解释一下您的答案是什么吗?
B = reshape(permute(reshape(A,2,5,[]), [1,3,2]), [], 5);