MATLABでは、(最適化に関する限り)より良いです:
1)他の関数からの出力から来る多くの入力を持つ関数「foo」を持つこと
また
2)関数の最後に結果をresults.matファイルに保存し、それを「foo」関数にロードして、このように入力を最小化しますか?
MATLABでは、(最適化に関する限り)より良いです:
1)他の関数からの出力から来る多くの入力を持つ関数「foo」を持つこと
また
2)関数の最後に結果をresults.matファイルに保存し、それを「foo」関数にロードして、このように入力を最小化しますか?
ほとんどの場合: オプション 1.
オプション 2 はファイル IO に依存するため、ハードディスク、SSD などとの間で 1 回の書き込みと 1 回の読み取りが行われるため、変数を 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
呼ばれる特別な /functionsを利用することもできます: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
は、 a とは何か、cell
およびその使用方法に関する豊富な情報を提供します。
グローバル変数を使用することは、メモリと処理の要件を最適化するためのより良い方法だと思います。キーワードを使用できますglobal
。