Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中,通过在k列后拆分矩阵来重塑矩阵_Matlab_Matrix - Fatal编程技术网

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

在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的重塑命令以几种方式来实现这一点,但失败了。感谢您的帮助。如果有关系,我的原始数据

假设我有一个矩阵,我们称之为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 = [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);