在Matlab中为什么cellfun(@size,x)对于非标量值不需要UniformOutput False?

时间:2014-04-29 23:16:34

标签: matlab

在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有什么不同?有没有办法为自定义函数获取与大小相同的行为?

谢谢!

1 个答案:

答案 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);