0

MATLABでは、(最適化に関する限り)より良いです:

1)他の関数からの出力から来る多くの入力を持つ関数「foo」を持つこと

また

2)関数の最後に結果をresults.matファイルに保存し、それを「foo」関数にロードして、このように入力を最小化しますか?

4

2 に答える 2

1

ほとんどの場合: オプション 1.

オプション 2 はファイル IO に依存するため、ハードディスク、SSD などとの間で 1 回の書き込みと 1 回の読み取りが行われるため、変数を 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呼ばれる特別な /functionsを利用することもできます: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

は、 a とは何か、cellおよびその使用方法に関する豊富な情報を提供します。

于 2013-07-09T13:13:58.103 に答える
0

グローバル変数を使用することは、メモリと処理の要件を最適化するためのより良い方法だと思います。キーワードを使用できますglobal

于 2013-07-09T13:17:48.267 に答える