【问题标题】:Capture all possible outputs based on variable number of inputs.根据可变数量的输入捕获所有可能的输出。
【发布时间】:2013-03-07 22:37:55
【问题描述】:

我希望 Matlab 返回变量输入函数的所有输出。例如,

[varargout]=cpd_intersect(varargin{:});

这仅返回最后一个输出,但我知道该函数被定义为提供多个输出。

而不是在 [A,B,C...]=pd_intersect(varargin{:}) 中定义虚拟变量 A、B、C 等。我想要一个像单元格一样的东西来存储基于输入值的所有输出值。我希望这是有道理的。非常感谢。

【问题讨论】:

标签: matlab variables capture


【解决方案1】:

我知道这已经晚了,但我认为这就是你想要的:

function [varargout] = myfun(f, varargin)
% apply f to args, and return all its outputs

[ x{1:nargout(f)} ] = f(varargin{:}); % capture all outputs into a cell array
varargout = x;                        % x{:} now contains the outputs of f

这里的见解是

  1. NARGOUT 可以对函数进行操作并返回它们的最大输出数
  2. 在 X 未定义时在左侧使用 [ X{1:2} ] = ...,相当于使用 [ X{1} X{2} ] = ...,并且可以将 2 个单独的输出捕获到单独的变量中。

注意两点:

  1. 这也适用于匿名函数!例如@(x)eig(x)
  2. 它不适用于使用varargout 的函数,即具有真正可变数量输出的函数。如果是这种情况,那么应该有一种方法来计算您将拥有多少输出,例如使用nargin

PS 我是从 @gnovice 那里学到的,If a MATLAB function returns a variable number of values, how can I get all of them as a cell array?

【讨论】:

    【解决方案2】:

    您可以通过返回 cell array 来做到这一点

    【讨论】:

    • 也许我没有问正确的方法,但我无法将内存预分配给未知大小的元胞数组。我只想根据输入数量强制所有输出。
    【解决方案3】:

    我看到您不能在 Matlab 中强制使用变量逗号分隔的输出列表。遗憾。这会很有用。看来我必须明确分配每个输出。这很糟糕,因为我事先不知道我会得到多少输出。

    【讨论】:

    • 是的,如果事先不知道输出的数量,这是不可能的。
    • 我认为可以使用nargout(FUNC) - 查看我的回答
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多