La réponse courte: la fonction intégrée arrayfun
fait exactement ce que votre map
fonction fait pour les tableaux numériques:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Il existe deux autres fonctions intégrées qui se comportent de la même manière: cellfun
(qui opère sur des éléments de tableaux de cellules) et structfun
(qui opère sur chaque champ d'une structure).
Cependant, ces fonctions ne sont souvent pas nécessaires si vous tirez parti de la vectorisation, en particulier en utilisant des opérateurs arithmétiques élémentaires . Pour l'exemple que vous avez donné, une solution vectorisée serait:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Certaines opérations opéreront automatiquement sur les éléments (comme l'ajout d'une valeur scalaire à un vecteur) tandis que d'autres opérateurs ont une syntaxe spéciale pour l'opération élément par élément (indiquée par un .
avant l'opérateur). De nombreuses fonctions intégrées dans MATLAB sont conçues pour fonctionner sur des arguments vectoriels et matriciels en utilisant des opérations élémentaires (souvent appliquées à une dimension donnée, comme sum
et mean
par exemple), et ne nécessitent donc pas de fonctions de carte.
Pour résumer, voici quelques façons différentes de mettre au carré chaque élément d'un tableau:
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
Bien sûr, pour une opération aussi simple, l'option n ° 1 est le choix le plus judicieux (et efficace).