And*_*ein 2 matlab vectorization
如何应用一个函数,使用arrayfun?返回非标量输出到数组?
例如 - 如何向量化以下代码?
array = magic(5);
A = cell(size(array));
for i=1:5
for j=1:5
A{i,j} = 1:array(i,j);
end
end
Run Code Online (Sandbox Code Playgroud)
这种天真的向量化尝试不起作用,因为输出不是标量
array = magic(5);
result = arrayfun(@(x)(1:x),array);
Run Code Online (Sandbox Code Playgroud)
有两种方法可以实现它:
可以将"UniformOutput"设置为false.然后,结果是一个单元格数组.
result = arrayfun(@(x)(1:x),array,'UniformOutput',false);
Run Code Online (Sandbox Code Playgroud)
但是我今天发现了一个很好的技巧,功能本身可以返回一个单元格.这消除了'UniformOutput',false每次键入的需要.
result = arrayfun(@(x){1:x},array)
Run Code Online (Sandbox Code Playgroud)
什么是真正有趣的在这里,我不必键入@(X)({1:x}),但我可以定义它只能使用花护腕@(X){1:x}
编辑(1):正如@Jonas正确指出的那样,毫无疑问()不需要常规护腕,因为它们是可选的.例如,@(x) x+1是一种有效的语法.
编辑(2):使用大括号方法或者使用大括号方法之间存在细微差别UniformOutput,false.当输入数组为空时,它们的行为是不同的.