[英]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.