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

时间:2010-06-22 19:03:22

标签: matlab anonymous-function

假设我想从一个返回两个输出的m文件函数创建一个匿名函数。是否可以设置匿名函数,使其仅返回m文件函数的第二个输出?

示例:ttest2返回两个输出,t / f和概率。如果我想使用cellfun的t检验,我可能只对收集概率感兴趣,即我想写这样的东西

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)

2 个答案:

答案 0 :(得分:15)

我无法知道anonymous function的表达式中的,让它选择从具有多个可能输出参数的函数返回哪个输出。但是,当评估匿名函数时,可以返回多个输出。以下是使用函数MAX

的示例
>> data = [1 3 2 5 4];  %# Sample data
>> fcn = @(x) max(x);   %# An anonymous function with multiple possible outputs
>> [maxValue,maxIndex] = fcn(data)  %# Get two outputs when evaluating fcn

maxValue =

     5         %# The maximum value (output 1 from max)


maxIndex =

     4         %# The index of the maximum value (output 2 from max)

此外,处理上面给出的具体示例的最佳方法是实际使用function handle @ttest2作为CELLFUN的输入,然后从{{获取多个输出3}}本身:

[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2);

在较新版本的MATLAB中,您可以将变量junk替换为CELLFUN以忽略第一个输出参数。

答案 1 :(得分:4)

一种方法是定义函数:

function varargout = getOutput(func,outputNo,varargin)
    varargout = cell(max(outputNo),1);
    [varargout{:}] = func(varargin{:});
    varargout = varargout(outputNo);
end

然后getOutput(@ttest2,2,u,v)仅提供p-value

要在cellfun中使用它,您需要运行:

probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)...

这样就不需要每次都编写一个包装器,但是你必须确保这个函数始终在路径中。