La respuesta corta: la función incorporada arrayfunhace exactamente lo que hace su mapfunción para matrices numéricas:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Hay otras dos funciones integradas que se comportan de manera similar: cellfun(que opera en elementos de matrices de celdas) y structfun(que opera en cada campo de una estructura).
Sin embargo, estas funciones a menudo no son necesarias si aprovecha la vectorización, específicamente utilizando operadores aritméticos de elementos . Para el ejemplo que dio, una solución vectorizada sería:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Algunas operaciones operarán automáticamente entre elementos (como agregar un valor escalar a un vector), mientras que otros operadores tienen una sintaxis especial para la operación de elementos (indicada por una .antes del operador). Muchas funciones integradas en MATLAB están diseñadas para operar en argumentos vectoriales y matriciales utilizando operaciones basadas en elementos (a menudo aplicadas a una dimensión determinada, como sumy meanpor ejemplo) y, por lo tanto, no requieren funciones de mapa.
Para resumir, aquí hay algunas formas diferentes de cuadrar cada elemento en una matriz:
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
Por supuesto, para una operación tan simple, la opción # 1 es la opción más sensata (y eficiente).