简短的回答:内置函数与您的函数对数值数组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 是最明智(也是最有效)的选择。