在MatLab的for循环内级联矩阵(Concatenating matrices within f

2019-10-21 08:46发布

在MATLAB中,我有一个矩阵SIMC其具有尺寸22×4我重新生成该矩阵使用10倍for环。

我想与基质落得U包含SimC(1)中的行1至22, SimC(2)中的行23至45等。 因此ü应该具有在端部尺寸220×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而不是串联。

Answer 1:

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 


文章来源: Concatenating matrices within for-loop in MatLab