почти всегда: вариант 1.
Как вариант 2 зависит от файла ввода-вывода, и, таким образом, один и один записи для чтения в/из жесткого диска, SSD или подобное, то, скорее всего, проиграет от поддержания переменных в ОЗУ , Более того, если вы передаете аргументы функции, и эта функция только читает, то явно не создаются копии этой переменной. Это не верно для .mat
файла решения, как то, что у вас уже есть в памяти будет явно скопированы на в чрезвычайно медленных устройств (HDD, SSD), а затем снова считываются в память с крайне медленное устройство, просто чтобы сохранить несколько входных аргументов.
Итак, если вы не работаете с большими наборами данных и ваши переменные не дают ошибок в памяти, держите все в ОЗУ как можно больше.
Вы можете свести к минимуму количество аргументов, просто собирая данные в виде данных контейнера. 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.
}
или аналогичный. Или вы можете использовать специальные 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
даст вам массу информации о какой cell
и как использовать его.
или 3) использовать 'cell' или' struct' для сбора и/или группировки данных и сведения к минимуму аргументов –