2010-06-24 84 views

回答

1

这与询问相同:为什么要创建一个值为0的变量?

通常你会这样做,如果你打算一起累积一堆结果在一起。在这种情况下,你必须开始“某处”。

6

继j_random_hacker的答案之后,在MATLAB中预分配数组而不是让MATLAB扩展它更有效。 MATLAB可以扩展阵列,如果你只是将元素关闭阵列的当前“结束”,像这样:

x = [] 
for ii=1:1e4 
    x(ii) = 1/ii; 
end 

这真的是低效的,因为在回路中的每一步,MATLAB将重新分配“X”是一个比以前更大的元素。以下是更快:

x = zeros(1, 1e4); 
for ii=1:1e4 
    x(ii) = 1/ii; 
end 

(可能是最快的还是在这种情况下:x = 1./(1:1e4);,但预分配路线是你需要什么,当你解决不了的事情的向量化操作)

+3

应该注意的是,这种优化虽然总是有用,但在涉及大矩阵之前通常并不重要。制作一个小测试脚本以查看这种效果如何缩放。我个人并不担心这个问题,直到大约200多个元素在一个不断增长的载体中。 – MatlabDoug 2010-06-24 14:22:32

+0

是的,越来越小的数组是(相对)很好,这就是为什么我选择1e4元素;) – Edric 2010-06-24 15:19:59

0

尽管可以从空矩阵开始并通过连接(添加)新元素来扩展它,但在MATLAB中向量扩展的效率非常低,因为每次连接另一个元素时都需要新的内存。预分配预先建立了一个正确大小的矩阵,然后可以用正确的值替换每个零元素。这种方法效率更高,特别是在涉及循环的程序中。

-1

如果您要处理大型矩阵,这很有帮助。或者如果你打算使用稀疏矩阵。当您一次又一次使用相同的矢量或矩阵时,这也很有帮助。