在 MATLAB 中是否更好(就优化而言):
1)拥有一个函数“foo”,其中包含来自其他函数输出的大量输入
或者
2)在函数结束时将结果保存到 results.mat 文件中并将其加载到“foo”函数中并以这种方式最小化其输入?
在 MATLAB 中是否更好(就优化而言):
1)拥有一个函数“foo”,其中包含来自其他函数输出的大量输入
或者
2)在函数结束时将结果保存到 results.mat 文件中并将其加载到“foo”函数中并以这种方式最小化其输入?
几乎总是:选项1。
由于选项 2 取决于文件 IO,因此对硬盘、SSD 或类似设备进行一次写入和一次读取,因此在 RAM 中保留变量可能会失败。此外,如果您将参数传递给函数,而该函数仅读取它们,则不会生成该变量的显式副本。这不适用于.mat
文件解决方案,因为您在内存中已有的内容将被显式复制到极慢的设备(HDD、SSD)上,然后再次从极慢的设备读回内存,只是为了节省几个输入参数。
因此,除非您正在处理大数据集并且您的变量会给您带来内存不足的错误,否则请尽可能将所有内容保存在 RAM 中。
您可以通过简单地收集容器数据类型中的数据来最小化参数计数。MATLAB 具有cell
并struct
为此目的(或者classdef
,如果您包含值类)。你可以改变这个:
[outarg1, outarg2] = function(arg1, arg2, arg3,...)
进入
[outarg1, outarg2] = function(S)
在哪里
S = struct(...
'arg1', function1(X),...
'arg2', function2(X,Y,Z),...
'arg3', function3(X,Z),...
%// etc.
);
或者
S = {
function1(X)
function2(X,Y,Z)
function3(X,Z)
%// etc.
}
或类似的。或者您可以使用称为and的特殊cell
/ 函数:varargin/nargin
varargout/nargout
varargout = function(varargin)
% rename input arguments
arg1 = varargin{1};
arg2 = varargin{2};
%// etc.
% assign all output arguments in one go
[varargout{1:nargout}] = deal(outargs{:}));
end % function
help <thing>
您可以通过在 MATLAB 命令提示符下键入来阅读有关所有这些内容的更多信息。例如,
help cell
将为您提供有关 acell
是什么以及如何使用它的大量信息。
我认为使用全局变量是优化内存和处理要求的更好方法。你可以使用关键字global
。