在Matlab中将矩阵附加到另一个矩阵

时间:2015-03-20 12:45:16

标签: performance matlab matrix

我有一个矩阵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

1 个答案:

答案 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迭代的示例,这仍然仅为大约一秒......