簡単な答え: 組み込み関数は、関数が数値配列に対して行うarrayfun
こととまったく同じことを行います。map
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
同様に動作する組み込み関数が他に 2 つあります。cellfun
(cell 配列の要素を操作する) とstructfun
(構造体の各フィールドを操作する) です。
ただし、ベクトル化を利用する場合、特に要素ごとの算術演算子を使用する場合、これらの関数は必要ないことがよくあります。あなたが与えた例では、ベクトル化されたソリューションは次のようになります。
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
一部の操作は要素全体で自動的に処理されますが (スカラー値をベクトルに追加するなど)、他の演算子には要素単位の操作用の特別な構文があります (.
演算子の前に a で示されます)。MATLAB の多くの組み込み関数は、要素ごとの演算 (多くの場合、 や などの特定の次元に適用される) を使用してベクトルおよび行列の引数を操作するように設計されているためsum
、mean
マップ関数は必要ありません。
要約すると、配列内の各要素を 2 乗するいくつかの異なる方法を次に示します。
x = 1:10; % Sample array
f = @(x) x.^2; % Anonymous function that squares each element of its input
% Option #1:
y = x.^2; % Use the element-wise power operator
% Option #2:
y = f(x); % Pass a vector to f
% Option #3:
y = arrayfun(f, x); % Pass each element to f separately
もちろん、このような単純な操作の場合、オプション #1 が最も賢明な (そして効率的な) 選択です。