Краткий ответ: встроенная функция 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 является наиболее разумным (и эффективным) выбором.