2

Matlab で式の値を別の式の n番目の戻り値にバインドする慣用的な方法はありますか?

たとえば、セル配列に格納されている多数のベクトルの最大値に対応するインデックスの配列が必要だとします。私はそれを行うことができます

function I = max_index(varargin)
    [~,I]=max(varargin{:});

cellfun(@max_index, my_data);

max_indexただし、これには、式で特定の戻り値を選択する場合ごとに固有の関数 ( ) を定義する必要があります。もちろん、必要なことを行う汎用関数を定義できます。

function y = nth_return(n,fun,varargin)
    [vals{1:n}] = fun(varargin{:});
    y = vals{n};

そして、次のように呼び出します。

cellfun(@(x) nth_return(2,@max,x), my_data)

ただし、このような関数を追加すると、コード スニペットの移植性が低下し、理解しにくくなります。nth_returnカスタム関数に依存せずに同じ結果を達成するための慣用句はありますか?

4

1 に答える 1

2

これは、あなたが言及した解決策のように、別の方法では不可能であることがわかっている限りです。したがって、次の構文を使用してください。

[~,I]=max(var);

または、実際に追加の機能を作成します。しかし、私はこれに反対することも提案します。出力を別の関数で使用する場合に備えて、追加のコード行を記述するだけです。同じトピックに対処するstackoverflowに関する以前の2つの質問を見つけましたが、これが不可能であることを確認しているようです。

MATLAB で無名関数を使用して出力をスキップする

MATLAB 関数のいくつかの戻り値をエレガントに無視する方法は?

~ 演算子がいくつかのバージョン前に MATLAB に追加された理由は、必要のない変数を保存できないようにするためでした。探しているような構文があれば、これは必要ありません。

于 2013-03-23T14:19:37.067 に答える