La risposta breve: la funzione integrata arrayfun
fa esattamente quello che fa la tua map
funzione per gli array numerici:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Ci sono altre due funzioni incorporate che si comportano in modo simile: cellfun
(che opera su elementi di array di celle) e structfun
(che opera su ogni campo di una struttura).
Tuttavia, queste funzioni spesso non sono necessarie se si trae vantaggio dalla vettorializzazione, in particolare utilizzando operatori aritmetici basati sugli elementi . Per l'esempio che hai fornito, una soluzione vettorializzata sarebbe:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Alcune operazioni opereranno automaticamente tra gli elementi (come l'aggiunta di un valore scalare a un vettore) mentre altri operatori hanno una sintassi speciale per l'operazione basata sugli elementi (indicata da un .
prima dell'operatore). Molte funzioni integrate in MATLAB sono progettate per operare su argomenti vettoriali e matrici usando operazioni basate sugli elementi (spesso applicate a una data dimensione, come sum
e mean
per esempio), e quindi non richiedono funzioni di mappa.
Per riassumere, ecco alcuni modi diversi per quadrare ogni elemento in un array:
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
Ovviamente, per un'operazione così semplice, l'opzione n. 1 è la scelta più sensata (ed efficiente).