在MatLab中连接for循环中的矩阵

时间:2014-12-06 13:56:38

标签: matlab loops matrix populate

在MatLab中,我有一个矩阵SimC,其尺寸为22 x 4.我使用for循环重新生成此矩阵10次。

我希望最终得到一个矩阵U,其中包含第1到22行中的SimC(1),第23到45行中包含SimC(2),依此类推。因此,U最终应该具有220 x 4的尺寸。

谢谢!

编辑:

nTrials = 10;
n = 22;
U = zeros(nTrials * n , 4)      %Dimension of the final output matrix

for i = 1 : nTrials

   SimC = SomeSimulation()    %This generates an nx4 matrix 
   U = vertcat(SimC)   

end    

不幸的是,上述内容并不起作用U = vertcat(SimC)只返回SimC而不是连接。

1 个答案:

答案 0 :(得分:2)

vertcat是一个不错的选择,但它会导致矩阵不断增长。这对大型程序来说不是一个好习惯,因为它确实会变慢。但是,在你的问题中,你没有循环太多次,所以vertcat没问题。

要使用vertcat,您不会预先分配U矩阵的完整最终大小...只需创建一个空的U。然后,在调用vertcat时,您需要为它提供两个要连接的矩阵:

nTrials = 10;
n = 22;
U = []      %create an empty output matrix
for i = 1 : nTrials
    SimC = SomeSimulation();    %This generates an nx4 matrix
    U = vertcat(U,SimC);  %concatenate the two matrices 
end  

更好的方法,因为你已经知道最终的大小,就是预先分配你的全部U(正如你所做的那样),然后通过计算正确的值将你的值放入U指数。像这样:

nTrials = 10;
n = 22;
U = U = zeros(nTrials * n , 4);      %create a full output matrix
for i = 1 : nTrials
    SimC = SomeSimulation();    %This generates an nx4 matrix
    indices = (i-1)*n+[1:n];  %here are the rows where you want to put the latest output
    U(indices,:)=SimC;  %copies SimC into the correct rows of U 
end