我有一个矩阵M = [4 3 2 1; 1 2 3 4]。我想在每次迭代时附加不同大小的矩阵:
M=[4 3 2 1;1 2 3 4];
for i=1:t
newM=createNewMatrix;
M=[M;newM];
end
newM可以是[]或Nx4矩阵。这虽然很慢。最快的方法是什么?
更新
预分配看起来像这样吗?
M=zeros(200000,4)
start=1
M(1:2,:)=M=[4 3 2 1;1 2 3 4];
for i=1:t
newM=createNewMatrix;
size_of_newM=size(newM,1);
finish=start+size_of_newM-1;
M(start:finish,:)=newM;
start=finish;
end
答案 0 :(得分:1)
与建议一样,预分配可提供最大的提升。 使用单元阵列是另一种好方法,可以这样实现:
M = cell(200000, 1);
M{1} = [4 3 2 1; 1 2 3 4];
for t=2:200000
i = randi(3)-1;
M{t}=rand(i,4);
end
MC = vertcat(M{:});
原则上,您在每个单元格中生成一个包含任意长数组的单元格数组,然后将它们连接起来。 这对我来说比预分配更新快了近两倍。另一方面,对于具有200k迭代的示例,这仍然仅为大约一秒......