【发布时间】:2015-03-20 12:45:16
【问题描述】:
我有一个矩阵 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
【问题讨论】:
-
最快的方法是预先分配最终的矩阵。由于它们在内存中的实现方式,元胞数组可能比连接数值矩阵更快(也取决于您的 MATLAB 版本)。见this Undocumented MATLAB article。
-
我更新了问题以验证您的建议
-
createNewMatrix是做什么的?也许这很慢。您是否尝试过制作随机矩阵并查看速度如何?而且,预分配是明确的第一步 -
您是否需要在每次迭代时访问扩展的
M?也许将个人createNewMatrix放入预先分配的单元格数组中,然后最后只调用一次cell2mat就足够了(而且速度很快)? -
@Dan 假设
createNewMatrix是一个黑盒函数。这是工作的本质,“不能改变”它的实施方式。这确实是一个耗时的功能,但至少我可以通过做正确的事情来节省一些时间。
标签: performance matlab matrix