A resposta curta: a função integrada arrayfun
faz exatamente o que sua map
função faz para matrizes numéricas:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Existem duas outras funções integradas que se comportam de forma semelhante: cellfun
(que opera em elementos de matrizes de células) e structfun
(que opera em cada campo de uma estrutura).
No entanto, essas funções geralmente não são necessárias se você tirar proveito da vetorização, especificamente usando operadores aritméticos elementares . Para o exemplo que você deu, uma solução vetorizada seria:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Algumas operações irão operar automaticamente entre os elementos (como adicionar um valor escalar a um vetor), enquanto outros operadores têm uma sintaxe especial para operação em elementos (denotada por a .
antes do operador). Muitas funções embutidas no MATLAB são projetadas para operar em argumentos vetoriais e matriciais usando operações elementares (frequentemente aplicadas a uma determinada dimensão, como sum
e mean
por exemplo) e, portanto, não requerem funções de mapa.
Para resumir, aqui estão algumas maneiras diferentes de enquadrar cada elemento em uma 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
Obviamente, para uma operação tão simples, a opção nº 1 é a escolha mais sensata (e eficiente).