簡體   English   中英

在MATLAB中使用匿名函數跳過輸出

[英]Skipping outputs with anonymous function in MATLAB

假設我想從返回兩個輸出的m文件函數創建一個匿名函數。 是否可以設置匿名函數,使其僅返回m文件功能的第二個輸出?

示例: ttest2返回兩個輸出,t / f和一個概率。 如果我想對cellfun使用t檢驗,我可能只對收集概率感興趣,即我想寫這樣的東西

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

我無法在匿名函數 的表達式中知道讓它選擇從具有多個可能輸出參數的函數返回哪個輸出。 但是,當您評估匿名函數時,您可以返回多個輸出。 這是使用函數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)

此外,為了處理您在上面給出的具體例子中,最好的辦法是實際上只是使用功能手柄 @ttest2作為輸入到CELLFUN ,然后從獲得多個輸出CELLFUN本身:

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

在較新版本的MATLAB上,可以將變量junk替換為~以忽略第一個輸出參數。

一種方法是定義函數:

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)...

這樣就無需每次都編寫包裝器,但是您必須確保此函數始終在路徑中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM