从n个小矩阵形成一个大矩阵

时间:2014-08-23 03:55:39

标签: matlab for-loop matrix append concatenation

我是MATLAB的新手。我已经使用n循环生成了3 x 1个较小的数字矩阵,比如说FOR。所有矩阵都具有如下随机值:

m1 = [3;2;1];   
m2 = [5;1;6];
m3 = [0.2;0.8;7]
m4 = [8;3;0] 
m5 = [3;7;6]
m6 = [8;2;1.3].

现在我想将所有值连接成一个更大的矩阵M,以便M可以像这样表示:

M = [m1 m2 m3; m4 m5 m6]

因此M的输出应为:

M = [3 5 0.2;
     2 1 0.8;
     1 6 7;
     8 3 8; 
     3 7 2;
     0 6 1.3];

如何使用FOR循环或其他任何内容对其进行初始化,以便每次增加计数器值即i时,都会导致插入新矩阵({{ 1}},m1& so on)在更大的矩阵内,即m2

请注意M是一个非常大的矩阵(可能大约40 x 40),因此我有很多较小的矩阵。

2 个答案:

答案 0 :(得分:0)

你真的需要个别变量吗?可能这样的解决方案更简单,仅使用一个mmatrix:

M=zeros(40,40)
for idx=1:size(M,1)
   M(idx,:)=your_code_here()
end

如果您之前使用过M1,现在使用M(1,:)获取M的第一行

答案 1 :(得分:0)

这似乎是将矩阵放在一起的非常低效的方式,但每个MatLab新手都应该在他的演变中经历这个阶段。 如果你使用for循环,你应该创建你的矩阵,使它们可以使用你的循环变量索引,否则没有必要使用循环。尝试单元格数组,例如:

m{1}=[3;2;1];
m{2}=[5;1;6];
m{3}=[.2;.8;7];
m{4}=[8;3;0];
m{5}=[3;7;6];
m{6}=[8;2;1.3];

现在您可以在for循环中合并它们:

M = [];
NBlocks = length(m) / 3;
for b=1:NBlocks
    M = [M; [m{(b-1)*3+1} m{(b-1)*3+2} m{(b-1)*3+3}] ];
end

注意此代码效率极低,特别是对于大型矩阵,仅用于教育目的。考虑重新设计您的任务,以便为M矩阵使用矩阵预分配。