La respuesta corta: la función incorporada arrayfun
hace exactamente lo que hace su map
funció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 sum
y mean
por 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).