Die kurze Antwort: Die integrierte Funktion arrayfun
macht genau das, was Ihre map
Funktion für numerische Arrays macht:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Es gibt zwei weitere integrierte Funktionen, die sich ähnlich verhalten: cellfun
(die auf Elemente von Zellenarrays angewendet werden) und structfun
(die auf jedem Feld einer Struktur ausgeführt werden).
Diese Funktionen sind jedoch häufig nicht erforderlich, wenn Sie die Vektorisierung nutzen, insbesondere mit elementweisen arithmetischen Operatoren . Für das von Ihnen angegebene Beispiel wäre eine vektorisierte Lösung:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Einige Operationen werden automatisch über Elemente hinweg ausgeführt (z. B. das Hinzufügen eines Skalarwerts zu einem Vektor), während andere Operatoren eine spezielle Syntax für die elementweise Operation haben (gekennzeichnet durch a .
vor dem Operator). Viele in MATLAB integrierte Funktionen sind so konzipiert, dass sie Vektor- und Matrixargumente mit elementweisen Operationen verarbeiten (häufig auf eine bestimmte Dimension angewendet, wie z. B. sum
und mean
), und erfordern daher keine Kartenfunktionen.
Zusammenfassend gibt es hier verschiedene Möglichkeiten, um jedes Element in einem Array zu quadrieren:
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
Für eine so einfache Operation ist Option 1 natürlich die sinnvollste (und effizienteste) Wahl.