2

だから...私はmatlab関数ハンドルとその目的を理解することができます。しかし、時々、それがあまりにも不可解になるとき、私はそれをさらに詳しく説明するのに助けを必要とします。この例をデフォルトのMATLABドキュメントから取得します。たとえば、次のようになります。

f = @(x)x.^3-2*x-5;

次のように書き直すこともできます。

function f(arg)
  arg.^3 - 2*arg - 5;
end   

ここから前述したように、誰かが以下のコードを解読するのを手伝ってもらえますか?デフォルトのmatlab関数でヘルプは必要ありません。ここでユーザー定義の無名関数を理解するのに少し役立ちます。

applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :))
applyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1))'
% Example
myMx = [1 2 3; 4 5 6; 7 8 9];
myFunc = @sum;
applyToRows(myFunc, myMx)
4

1 に答える 1

3
applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :))

これは、別の関数を作成する関数です。たとえば、次の関数です(質問の例から抜粋)。

applyToGivenRow(@myFunc,myMx)

関数に評価されます

@(row) myFunc(myMx(row,:))

それで

applyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1))'

このapplyToGivenRow関数を使用します。Arrayfunは、フィードしたベクトル()をループし、フィードし1:size(matrix,1)た関数(applyToGivenRow(func, matrix))をベクトルの値ごとに評価します。

元の作者はそれをに短縮することもできたでしょう

applyToRows = @(func, matrix) arrayfun(@(row) func(matrix(row, :), 1:size(matrix,1))'

無名関数arrayfunに関するドキュメントを読んでください。これは、簡単に理解できるはずです。

于 2012-12-21T11:51:09.897 に答える