为什么Matlab警告我“预先分配不推荐”

时间:2017-06-21 21:03:48

标签: matlab

当我在Matlab中遇到警告时,我正在为Andrew Ng编写Coursera机器学习课程的函数。我没有写出答案应该是什么,但起始代码全部在这里,除了一行用于解释目的。问题不是捕获问题的答案,而是解释Matlab的警告。

我得到的警告(不是错误)说:

Line 6: The variable 'g' appears to be preallocated but preallocation is not recommended here 

这是代码

function g = sigmoid(z)
%SIGMOID Compute sigmoid function
%   g = SIGMOID(z) computes the sigmoid of z.

% You need to return the following variables correctly 
g = zeros(size(z));

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the sigmoid of each value of z (z can be a matrix,
%               vector or scalar).

g = 1./z;

% =============================================================

end

2 个答案:

答案 0 :(得分:7)

这在MathWorks的a blog post by Loren Shure中有所涉及,特别是在“常见的误解”一节中。一小段摘录:

  

经常告诉用户预先分配我们有时会看到变量预分配的代码,即使它是不必要的。这不仅使代码复杂化,而且实际上可能导致预分配意味着缓解的问题,即运行时性能和峰值内存使用。

在您的情况和Loren给出的示例之间绘制相似之处,您使用g函数预先分配zeros,然后使用1./z的结果重新分配它。当评估zeros时,调用1./z分配的内存将被丢弃。这样做的结果是需要两倍的内存,一个块用于预分配的零,一个块用于1./z的结果。

简而言之,在这种情况下,请相信Code Analyzer

答案 1 :(得分:2)

该行

g = zeros(size(z));

是多余的,因为在它之后你将g重新定义为

g = 1./z;