Krótka odpowiedź: funkcja wbudowana arrayfun
robi dokładnie to samo, co twoja map
funkcja dla tablic numerycznych:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Istnieją dwie inne wbudowane funkcje, które zachowują się podobnie: cellfun
(które działają na elementach tablic komórek) i structfun
(które działają na każdym polu struktury).
Jednak te funkcje często nie są konieczne, jeśli korzystasz z wektoryzacji, w szczególności przy użyciu operatorów arytmetycznych opartych na elementach . Na przykład, który podałeś, wektoryzowanym rozwiązaniem byłoby:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Niektóre operacje będą automatycznie działać na elementach (np. Dodawanie wartości skalarnej do wektora), podczas gdy inne operatory mają specjalną składnię dla operacji elementarnych (oznaczoną a .
przed operatorem). Wiele funkcji wbudowanych w MATLAB-ie jest zaprojektowanych do działania na argumentach wektorowych i macierzowych za pomocą operacji elementarnych (często stosowanych do danego wymiaru, takiego jak sum
i mean
na przykład), a zatem nie wymaga funkcji mapowania.
Podsumowując, oto kilka różnych sposobów prostowania każdego elementu w tablicy:
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
Oczywiście dla tak prostej operacji opcja nr 1 jest najbardziej rozsądnym (i wydajnym) wyborem.