如何使表达式的值等于另一个表达式的第二个返回值

时间:2013-03-23 13:41:43

标签: matlab

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

例如,假设我想要一个索引数组,该索引数组对应于存储在单元格数组中的多个向量的最大值。

我能做到这一点
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函数?

1 个答案:

答案 0 :(得分:2)

据我所知,这与你提到的解决方案不同。所以只需使用语法:

[~,I]=max(var);

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

Skipping outputs with anonymous function in MATLAB

How to elegantly ignore some return values of a MATLAB function?

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