短い答え:組み込み関数は、数値配列に対して関数が実行するarrayfun
ことを正確に実行しmap
ます。
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
同様に動作する他の2つの組み込み関数があります:(cellfun
セル配列の要素で動作する)およびstructfun
(構造体の各フィールドで動作する)。
ただし、ベクトル化を利用する場合、特に要素ごとの算術演算子を使用する場合、これらの関数はしばしば必要ありません。あなたが与えた例では、ベクトル化されたソリューションは次のようになります:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
一部の操作は要素全体で自動的に動作します(スカラー値をベクトルに追加するなど)一方で、他の演算子には要素ごとの操作(.
演算子の前にaで示される)のための特別な構文があります。組み込みMATLABの関数の多くは、(多くの場合など、所定の寸法に適用される要素単位操作を使用してベクトルと行列引数で動作するように設計されているsum
とmean
、例えば)、したがってマップ機能を必要としません。
まとめると、配列内の各要素を二乗するいくつかの方法があります。
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が最も賢明(かつ効率的)な選択肢です。