2

/edit:有关该主题的有趣讨论,请参见此处。谢谢@丹


根据 matrix 的大小,使用a(m,n) = 0似乎aa = zeros(m,n). 在循环之前进行预分配时,两种变体是否相同?

4

2 回答 2

5

它们肯定不一样。

尽管有很多方法可以超越 的性能a=zeros(m,n),但简单地做a(m,n) = 0并不是一种安全的方法。如果已经存在任何条目,a它们将保持存在。

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

于 2013-08-13T09:54:22.577 回答
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.
于 2013-08-13T09:47:20.203 回答