Да, вы можете писать функции высшего порядка в MATLAB.Для этого требуется дескрипторы функций .
Вы создаете дескриптор функции с помощью оператора @
.Например, @mean
является дескриптором функции mean
.Вы также можете создавать анонимные функции (на других языках, называемых лямбдами), которые могут захватывать переменные.Например,
data = rand(50,1);
func = @(ii)mean(data.^ii);
создает дескриптор функции func
, который можно передать функции, и содержит data
.
Ваша функция rowMap
может быть записана как
function Y = rowMap(f, X)
m = size(X, 1);
Y = zeros(m,1);
for i = 1:m
Y(i) = f(X(i,:));
end
и вызываться с помощью
X = randn(50, 50);
Y = rowMap(@mean, X);
или, используя описанную выше функцию дескриптора func
,
Y = rowMap(func, X);
(Обратите внимание, что это то же самоепри вызове Y = mean(X, 2)
многие функции MATLAB работают только в одном измерении.)