在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
而不是连接。
答案 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