16

2 つの出力を返す m-file-function から無名関数を作成したいとします。m-file-function から 2 番目の出力のみを返すように無名関数を設定することは可能ですか?

例: ttest2t/f と確率の 2 つの出力を返します。で t 検定を使用したい場合cellfun、確率を収集することだけに関心があるかもしれません。つまり、次のようなものを書きたいと思います。

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
4

2 に答える 2

15

無名関数の式の中で、複数の可能な出力引数を持つ関数からどの出力を返すかを選択させる方法はありません。ただし、無名関数を評価するときに複数の出力を返すことができます。関数MAXを使用した例を次に示します。

>> data = [1 3 2 5 4];  %# Sample data
>> fcn = @(x) max(x);   %# An anonymous function with multiple possible outputs
>> [maxValue,maxIndex] = fcn(data)  %# Get two outputs when evaluating fcn

maxValue =

     5         %# The maximum value (output 1 from max)


maxIndex =

     4         %# The index of the maximum value (output 2 from max)

また、上記の特定の例を処理する最良の方法は、関数ハンドルを CELLFUN@ttest2への入力として実際に使用し、 CELLFUN自体から複数の出力を取得することです。

[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2);

新しいバージョンの MATLAB では、変数junkをに置き換えて~、最初の出力引数を無視できます。

于 2010-06-22T19:35:28.337 に答える
4

これを行う 1 つの方法は、関数を定義することです。

function varargout = getOutput(func,outputNo,varargin)
    varargout = cell(max(outputNo),1);
    [varargout{:}] = func(varargin{:});
    varargout = varargout(outputNo);
end

そして、getOutput(@ttest2,2,u,v)のみを与えp-valueます。

で使用するには、cellfun次を実行する必要があります。

probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)...

これにより、毎回ラッパーを記述する必要がなくなりますが、この関数が常にパスにあることを確認する必要があります。

于 2012-08-28T14:36:28.163 に答える