Коротка відповідь: вбудована функція arrayfunробить саме те, що mapробить ваша функція для числових масивів:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Є дві інші вбудовані функції, які поводяться аналогічно: cellfun(яка працює над елементами комірок масивів) і structfun(яка працює на кожному полі структури).
Однак ці функції часто не потрібні, якщо ви скористаєтеся векторизацією, зокрема, використовуючи елементарні арифметичні оператори . У прикладі, який ви навели, векторизованим рішенням було б:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Деякі операції будуть автоматично працювати над елементами (наприклад, додавати скалярне значення до вектора), тоді як інші оператори мають спеціальний синтаксис для операції, орієнтованої на елементи (позначається .перед оператором). Багато вбудовані функції в MATLAB призначені для роботи на векторних і матричних аргументів , використовуючи операції поелементно (часто застосовується для даного виміру, такі як sumі mean, наприклад), і , отже , не вимагають функцій карти.
Підводячи підсумок, ось кілька різних способів квадратування кожного елемента в масиві:
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
Звичайно, для такої простої операції варіант №1 є найбільш розумним (і ефективним) вибором.