2

Matlab 中是否有一种惯用的方式将表达式的值绑定到另一个表达式的第 n返回值?

例如,假设我想要一个索引数组,该数组对应于存储在元胞数组中的多个向量的最大值。我可以做到这一点

function I = max_index(varargin)
    [~,I]=max(varargin{:});

cellfun(@max_index, my_data);

但这需要max_index为每个想要在表达式中选择特定返回值的情况定义一个函数 ()。我当然可以定义一个通用函数来做我想要的:

function y = nth_return(n,fun,varargin)
    [vals{1:n}] = fun(varargin{:});
    y = vals{n};

并称它为:

cellfun(@(x) nth_return(2,@max,x), my_data)

但是,添加此类功能会使代码片段的可移植性降低且更难理解。是否有一种惯用的方式来实现相同的结果而不必依赖自定义nth_return函数?

4

1 回答 1

2

据我所知,与您提到的解决方案一样,这是不可能的。所以只需使用语法:

[~,I]=max(var);

或者确实创建一个额外的功能。但我也建议不要这样做。只需编写额外的代码行,以防您想在另一个函数中使用输出。我在 stackoverflow 上发现了两个较早的问题,它们涉及相同的主题,并且似乎证实这是不可能的。

在 MATLAB 中使用匿名函数跳过输出

如何优雅地忽略 MATLAB 函数的某些返回值?

某些版本之前将 ~ 运算符添加到 MATLAB 的原因是为了防止您保存不需要的变量。如果存在与您正在搜索的语法类似的语法,则没有必要。

于 2013-03-23T14:19:37.067 回答