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