假設我想從一個返回兩個輸出的m文件函數創建一個匿名函數。是否可以設置匿名函數,使其僅返回m文件函數的第二個輸出?例如:ttest2
返回兩個輸出,t/f和概率。如果我想使用t檢驗cellfun
,我可能只興趣收集的概率,也就是我想寫這樣的事情使用MATLAB中的匿名函數跳過輸出
probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
假設我想從一個返回兩個輸出的m文件函數創建一個匿名函數。是否可以設置匿名函數,使其僅返回m文件函數的第二個輸出?例如:ttest2
返回兩個輸出,t/f和概率。如果我想使用t檢驗cellfun
,我可能只興趣收集的概率,也就是我想寫這樣的事情使用MATLAB中的匿名函數跳過輸出
probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
有沒有辦法,我表達內知道的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,然後從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)...
這樣就不必每次都寫一個包裝,但你必須確保此功能始終在路徑。
換句話說,我確實需要編寫一個包裝函數。感謝您的澄清!另外:恭喜20k! – Jonas 2010-06-24 18:40:03
@Jonas:謝謝,祝賀銀色的MATLAB徽章! – gnovice 2010-06-25 15:45:53