Коротка відповідь: вбудована функція 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 є найбільш розумним (і ефективним) вибором.