关于matlab中arrayfun的一个例子

时间:2015-03-25 00:20:53

标签: matlab

我是matlab的新手。我有以下代码:

names=arrayfun(@num2str, 1:nseq_all, 'unif', 0);

搜索之后,我理解arrayfun将一个函数应用于数组的每个元素。所以,我想在这种情况下,我们将num2str函数应用于数组1的每个元素:nseq_all。 ' UNIF'和0是函数的参数和相应的值部分。我很难理解这一部分。任何评论都非常感谢。

2 个答案:

答案 0 :(得分:3)

'unif',0'UniformOutput',false的简写,这意味着输出与输入数组1:nseq_all的尺寸不同。

这是因为字符串1的尺寸为1x1,但124的尺寸为1x3。

names将是一个单元格数组,因为普通数字数组不能包含具有不同数量元素的行/列。

请务必仔细阅读arrayfun documentation

答案 1 :(得分:1)

'unif', 0'UniformOutput',false的简写。请注意,Matlab中的parameterName / parameterValue对允许parameterName的缩写,只要它不与另一个可能的参数冲突即可。在这种情况下,'un',0也会起作用。无论如何,那个选项是什么?

modifiedArray = arrayfun(function_handle, array)

function_handle中定义的函数应用于array的每个元素,并返回modifiedArray,其大小与array相同,并且返回{{1}的类返回。 此语法只能在function_handle的输出为标量时使用,但类无关紧要,因此function_handle的输出可以是标量结构,即{{ 1}}有效。

function_handle

arrayfun(@(x)struct('field',x),magic(4))中定义的函数应用于cellArray = arrayfun(function_handle, array, 'UniformOutput', false)的每个元素,并返回function_handle,其大小与array相同。 cellArray的每个元素都包含array调用的输出。 如果cellArray的输出是非标量,则必须使用此语法(即使每个计算都返回一个1 x 2的数组,这是完全一致的),但当然,你也可以使用它与标量输出。

在您的情况下,如果function_handle的参数超过9,function_handle将返回一个非标量的字符数组。因此,您需要将num2str设置为num2str }。