0

在 MATLAB 中是否更好(就优化而言):

1)拥有一个函数“foo”,其中包含来自其他函数输出的大量输入

或者

2)在函数结束时将结果保存到 results.mat 文件中并将其加载到“foo”函数中并以这种方式最小化其输入?

4

2 回答 2

1

几乎总是:选项1。

由于选项 2 取决于文件 IO,因此对硬盘、SSD 或类似设备进行一次写入和一次读取,因此在 RAM 中保留变量可能会失败。此外,如果您将参数传递给函数,而该函数仅读取它们,则不会生成该变量的显式副本。这不适用于.mat文件解决方案,因为您在内存中已有的内容将被显式复制到极慢的设备(HDD、SSD)上,然后再次从极慢的设备读回内存,只是为了节省几个输入参数。

因此,除非您正在处理大数据集并且您的变量会给您带来内存不足的错误,否则请尽可能将所有内容保存在 RAM 中。

您可以通过简单地收集容器数据类型中的数据来最小化参数计数。MATLAB 具有cellstruct为此目的(或者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/narginvarargout/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是什么以及如何使用它的大量信息。

于 2013-07-09T13:13:58.103 回答
0

我认为使用全局变量是优化内存和处理要求的更好方法。你可以使用关键字global

于 2013-07-09T13:17:48.267 回答