La risposta breve: la funzione built-in ARRAYFUN fa esattamente ciò che il vostro mappa funzione fa per matrici numeriche:
>> y = arrayfun(@(x) x^2,1:10)
y =
1 4 9 16 25 36 49 64 81 100
Ci sono altre due funzioni built-in che si comportano allo stesso modo: CELLFUN (che opera su elementi di array di celle) e STRUCTFUN (che opera su ciascun campo di una struttura).
Tuttavia, queste funzioni spesso non sono necessarie se si sfrutta la vettorizzazione, in particolare utilizzando arithmetic operators element-wise. Per l'esempio che ha dato una soluzione vettorializzare sarebbe:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Alcune operazioni funzionano automaticamente tutti gli elementi (come l'aggiunta di un valore scalare per un vettore) mentre altri operatori hanno una sintassi speciale per il funzionamento dell'elemento-saggio (denotata da un "." prima dell'operatore). Molte funzioni in MATLAB sono progettate per operare su argomenti vettoriali e matriciali usando operazioni element-wise, e quindi non richiedono funzioni di mappa.
In sintesi, qui alcuni modi diversi di quadratura ciascun elemento di 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
Naturalmente, per una semplice operazione di tale opzione # 1 è la scelta più ragionevole.
Lezione # 1 che va da altre lingue per Matlab: Non utilizzare per cicli, sono alcuni ordini di grandezza più lenta di una soluzione vectorized. – CookieOfFortune
Che dire della ricorsione? – Dario
Con l'introduzione del JIT, per i loop non prendi la penalità che hanno fatto una volta. – MatlabDoug