gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:35:06 27 4
gpt4 key购买 nike

在 Matlab 中你可以做以下事情

x = {1:4, rand(3,3,3), 3};
[a, b, c] = cellfun(@size, x);

以上虽然不是标量输出,但不要求 UniformOutput 为假。

如果我有

x = {1:4, rand(3,3,3), 3};
[a,b,c] = cellfun(@(my_dummy_fun) [1, 2, 3], x); % GIVES ERROR

我得到一个错误。这与@size 有何不同?有没有办法让自定义函数获得与大小相同的行为?

谢谢!

最佳答案

您对大小感到困惑。 Size 允许单个输出(向量)或多个输出参数。

%three outputs
[a,b,c]=size(rand(3,3,3))
%one output
[x]=size(rand(3,3,3))

其中 x =[a,b,c]

您成功地将 size 与三个输出参数一起使用,但您的函数句柄只有一个输出参数(它是一个向量)。

我不知道任何可能的语法来直接定义一个带有多个输出参数的匿名函数。为了解决这个问题,我编写了这个小包装函数:

function varargout=vec2nargout(in)
varargout=mat2cell(in(:),ones(1,nargout));
end

它允许:

[a,b,c] = cellfun(@(my_dummy_fun)vec2nargout([1,2,3]), x);

关于matlab - 在 Matlab 中,为什么 cellfun(@size, x) 不需要非标量值的 UniformOutput False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23376976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com