MATLAB:更快地预分配零矩阵

时间:2013-08-13 09:22:50

标签: matlab loops memory-management

/ edit :有关该主题的有趣讨论,请参阅here。谢谢@Dan


使用a(m,n) = 0似乎比a的矩阵更快,具体取决于矩阵a = zeros(m,n)的大小。在循环之前进行预分配时,两种变体是否相同?

2 个答案:

答案 0 :(得分:5)

他们肯定不一样。

虽然有很多方法可以超越a=zeros(m,n)的性能,但仅仅执行a(m,n) = 0并不是一种安全的方法。如果a中的任何条目已存在,则会保留现有条件。

请参阅this了解一些不错的选项,如果您不介意风险,也可以考虑向后循环。

答案 1 :(得分:1)

我认为这取决于你的m和n。你可以自己检查时间

tic; b(2000,2000) = 0; toc;
Elapsed time is 0.004719 seconds.
tic; a = zeros(2000,2000); toc;
Elapsed time is 0.004399 seconds.

tic; a = zeros(2,2); toc;
Elapsed time is 0.000030 seconds.
tic; b(2,2) = 0; toc;
Elapsed time is 0.000023 seconds.