简短的答案:内置函数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
某些操作会自动跨元素进行操作(例如将标量值添加到向量中),而其他一些运算符则具有针对逐元素运算的特殊语法(由.
运算符之前的a表示)。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是最明智(和最有效)的选择。