【发布时间】:2015-03-09 12:05:55
【问题描述】:
我正在编写一个 matlab 代码,其中有很多变量需要预先分配(每个变量都是 8760x1 双倍)。这些值在 for 循环中生成:
a=zeros(8760,1);
b=zeros(8760,1);
(...)
for i=1:8760
a(i)=[some code];
b(i)=[some code];
(...)
end
但是,看到我有很多这些变量,我想在另一个文件中预分配参数(更干净)。
预分配.m
a=zeros(8760,1);
b=zeros(8760,1);
...
main.m
preallocate
for i=1:8760
a(i)=[some code];
b(i)=[some code];
(...)
end
在另一个 matlab 文件中进行预分配是否与在与执行文件相同的文件中进行预分配一样有效?其他建议?
【问题讨论】:
-
我认为这种方法没有任何问题。为了清晰起见,我经常将我的程序分成几个脚本
-
至于其他建议:
a(8760,1)=0;可能是比a=zeros(8760,1);更快的分配方式 -
@LuisMendo:我们在学校学习基本的 Matlab 时学会了使用 zeros(nRow,nCol) 进行预分配。但是,我看到您的方法更快(至少对于定义矩阵。这两者有什么区别?
-
@ROLF - 这是 Eitan T 的一篇文章,比较了如何使用各种方法初始化零数组:stackoverflow.com/a/14195309/3250829 - 确定
zeros(M,N)有很多不必要的开销。基本上,在最终创建零数组之前会执行许多额外的操作。执行a(8760,1) = 0已被证明是初始化设置为 0 的内存最快的方法之一。您可以查看该线程,其中答案是更详细的分析。
标签: matlab allocation