h3h*_*alf 3 performance matlab
我的问题并不明确依赖于一段代码,而是更具概念性.
与某些编程语言不同,MATLAB不需要在使用变量之前对其进行明确初始化.例如,在脚本文件的中途定义"myVector"是完全有效的:
myVector = vectorA .* vectorB
Run Code Online (Sandbox Code Playgroud)
我的问题是:将变量(例如上面的'myVector')初始化为零然后为它们赋值,或者在整个程序中保持初始化是否更快?
这是我正在谈论的直接比较:
整个初始化:
varA = 8;
varB = 2;
varC = varA - varB;
varD = varC * varB;
Run Code Online (Sandbox Code Playgroud)
在开始时初始化:
varA = 8;
varB = 2;
varC = 0;
varD = 0;
varC = varA - varB;
varD = varC * varB;
Run Code Online (Sandbox Code Playgroud)
一方面,无缘无故地拥有这些额外的代码行似乎有点浪费.但另一方面,有一点意义是,一次为程序分配所有内存而不是在运行时分散会更快.
有没有人有点洞察力?
将您的Initializing at start:
代码复制并粘贴到MATLAB编辑器窗口中,您会收到如下警告:
如果你进入Details
,你会读到这个 -
Explanation
The code does not appear to use the assignment to the indicated variable. This situation occurs when any of the following are true:
Another assignment overwrites the value of the variable before an operation uses it.
The specified argument value contains a typographical error, causing it to appear unused.
The code does not use all values returned by a function call...
Run Code Online (Sandbox Code Playgroud)
在我们的例子中,这个警告的原因是The code does not use all values
.因此,这澄清了初始化/预分配对这种情况没有帮助.
根据我的经验,预分配有助于您以后需要将索引编入其中的一部分.
因此,如果您需要索引varC
存储结果的一部分,预分配将有所帮助.因此,这会更有意义 -
varC = zeros(...)
varD = zeros(...)
varC(k,:) = varA - varB;
varD(k,:) = varC * varB;
Run Code Online (Sandbox Code Playgroud)
同样,在索引时,如果你超出了大小varC
,MATLAB会花时间尝试为它分配更多的内存空间,这样会慢一点.因此,将输出变量预分配到maximum size
您认为用于存储结果的变量.但是,如果你不知道结果的大小,你就会陷入困境并且必须将结果附加到输出变量中,这肯定会减慢速度.
归档时间: |
|
查看次数: |
252 次 |
最近记录: |