我是matlab的新手。我有以下代码:
names=arrayfun(@num2str, 1:nseq_all, 'unif', 0);
搜索之后,我理解arrayfun将一个函数应用于数组的每个元素。所以,我想在这种情况下,我们将num2str函数应用于数组1的每个元素:nseq_all。 ' UNIF'和0是函数的参数和相应的值部分。我很难理解这一部分。任何评论都非常感谢。
答案 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
}。