Matlabcellfun函数
Matlab中有⼀个数组类型,叫做Cell,Cell是⼀种⼴义数组,他的每个元素称之为⼀个单元,每个单元可以是任意类型数组,⽐如数值数组,字符串,结构体或者⼀个⼦Cell.因此每个单元可以有不同的⼤⼩.
cellfun是将⼀个函数运⽤到Cell数组中的所有元素
语法:
[A1,…,Am] = cellfun(func,C1,…,Cn)
[A1,…,Am] = cellfun(func,C1,…,Cn,Name,Value)
[A1,…,Am] = cellfun(func,C1,…,Cn)调⽤函数句柄func指定的函数,并传递Cell数组中的元素C1,…,Cn,n是传递到函数的参数个数,输出数组A1,…,Am,m为func函数输出的数量.第i次迭代对应于语法为[A1(i),…,Am(i)] = func(C1{i},…,Cn{i})。cellfun函数不能指定顺序来执⾏func函数。
[A1,…,Am] = cellfun(func,C1,…,Cn,Name,Value)调⽤函数func,附加选项通过⼀个或多个”Name,Value”键值对参数指定,Name可以取值”UniformOutput”或者”ErrorHandler”.
键值对参数
‘UniformOutput’:逻辑值如下
true 表⽰对于所有输⼊,函数func的每⼀个输出都是⼀个标量单元数组,标量结构,或者⼀个总是相同类型和⼤⼩的标量值。
cellfun函数将输出组合为A1,…Am的数组。每个输出数组都与单独的函数输出类型相同。
false要求cellfun函数将输出组合成单元数组A1,…,Am。函数func的输出可以是任何⼤⼩或类型。
‘ErrorHandler’ ⼀个函数句柄,捕获所有MATLAB执⾏此函数遇到的错误,定义这个函数来重新抛出错误或者返回⼀个有效的输出.
Examples
计算Cell数组中元素的平均值.
C = {1:10, [2; 4; 6], []};
averages = cellfun(@mean, C)
% 返回结果
averages = 5.5000 4.0000NaN
[nrows, ncols] = cellfun(@size, C)
% 返回结果
nrows =
130
ncols =
1010
创建⼀个包含字符向量的单元数组,并将其缩写为前三个字符。由于输出字符⽮量为⾮标量,因此将UniformOutput设置为false。
days = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};
abbrev = cellfun(@(x) x(1:3), days, 'UniformOutput', false)
% abbrev = 'Mon''Tue''Wed''Thu''Fri'
语法 @(x)创建了⼀个匿名函数.
计算两个单元阵列C和D之间的协⽅差,因为协⽅差输出是⾮标量,将UniformOutput设为false。
c1 = rand(5,1); c2 = rand(10,1); c3 = rand(15,1);
d1 = rand(5,1); d2 = rand(10,1); d3 = rand(15,1);
matlab数组赋值C = {c1, c2, c3};
D = {d1, d2, d3};
covCD = cellfun(@cov, C, D, 'UniformOutput', false)
% covCD = [2x2 double] [2x2 double] [2x2 double]
定义并调⽤⾃定义错误处理函数。
function result = errorfun(S, varargin)
warning(S.identifier, S.message);
result = NaN;
end
A = {rand(3)};
B = {rand(5)};
AgtB = cellfun(@(x,y) x > y, A, B, 'ErrorHandler', @errorfun, ...
'UniformOutput', false)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论