在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
函数?
答案 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的原因是为了防止您保存不需要的变量。如果存在与您要搜索的语法类似的语法,则不需要这样做。