且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将一个函数的多个输出直接传递给另一个?

更新时间:2023-11-09 23:35:04

回答标题中的问题: 使用以下函数,可以将一个函数的多个输出重定向到另一个:

To answer the question in the title: Using the following function, it is possible to redirect multiple outputs of a function to another:

function varargout = redirect(source, destination, n_output_source, which_redirect_from_source, varargin)
%(redirect(source, destination, n_output_source, which_redirect_from_source,....)
%redirect output of a function (source) to input of another function(destination)
% source: function pointer
% destination: function pointer
% n_output_source: number of outputs of source function (to select best overload function)
% which_redirect_from_source: indices of outputs to be redirected
% varargin arguments to source function
    output = cell(1, n_output_source);
    [output{:}] = source(varargin{:});
    varargout = cell(1, max(nargout,1));
    [varargout{:}] = destination(output{which_redirect_from_source});
end

现在我们可以将其应用到示例中:

And now we can apply it to the example:

[~,R] = redirect(@meshgrid,@cart2pol, 2, [1, 2], -2:2, -2:2)

这里,源函数有 2 个输出,我们希望将输出 1 和 2 从源重定向到目标.-2:2 是源函数的输入参数.

Here, source function has 2 outputs and we want to redirect outputs 1 and 2 from source to destination. -2:2 is the input argument of the source function.

处理上述示例的其他方法:如果您可以使用 GNU Octave,以及 bsxfunnthargout,这就是您的解决方案:

Other way to deal with the mentioned example: If you can use GNU Octave, with bsxfun and nthargout this is your solution:

R = bsxfun(@(a,b) nthargout(2, @cart2pol,a,b),(-2:2)',(-2:2))

在 Matlab 中一个可能的解决方案是:

in Matlab a possible solution is:

[~, R] = cart2pol(meshgrid(-2:2), transpose(meshgrid(-2:2)))

function R = cart2pol2(m)
    [~,R] = cart2pol(m,m')
end

cart2pol2(meshgrid(-2:2, -2:2))