在Matlab中,您可以执行以下操作
x = {1:4, rand(3,3,3), 3};
[a, b, c] = cellfun(@size, x);
以上虽然不是标量输出,但不要求UniformOutput为false。
如果我有
x = {1:4, rand(3,3,3), 3};
[a,b,c] = cellfun(@(my_dummy_fun) [1, 2, 3], x); % GIVES ERROR
我收到错误。这与@size有什么不同?有没有办法为自定义函数获取与大小相同的行为?
谢谢!
答案 0 :(得分:2)
你对大小感到困惑。 Size允许单个输出(矢量)或多个输出参数。
%three outputs
[a,b,c]=size(rand(3,3,3))
%one output
[x]=size(rand(3,3,3))
其中x = [a,b,c]
您成功使用带有三个输出参数的大小,但您的函数句柄只有一个输出参数(它是一个向量)。
我不知道直接定义具有多个输出参数的匿名函数的任何可能语法。为了解决这个问题,我编写了这个小包装函数:
function varargout=vec2nargout(in)
varargout=mat2cell(in(:),ones(1,nargout));
end
它允许:
[a,b,c] = cellfun(@(my_dummy_fun)vec2nargout([1,2,3]), x);