2016-05-03 55 views
0

我有一個MATLAB代碼,我做的是如何理解它如何works.In主代碼在我的代碼MATLAB函數參數

%Tuning 
tunestruct = {samplefunc,numreps,data_type,MS_criterion}; 
[Xtrain,optk,optsig2,tuningExtras] = tuneSKSC(data,kernel_type,maxk,tunestruct); 

tuneSKC.m始於

function [Xtrain,optk,optsig2,extras] = tuneSKSC(datastruct,kernel,maxk,tunestruct) 

我的問題是什麼是tunestruct?那麼,功能是data,kernel_type,maxk,tunestruct arguments

我已經粘貼tunestruct.m http://pastebin.com/cFH433Md

+0

是這些都是函數的所有參數。至於*他們是什麼,你將需要問作者。所有你可以推斷的是,'tunestruct'是'{samplefunc,numreps,data_type,MS_criterion}的單元數組'' – Suever

+0

@Suever謝謝,爲什麼作者使用單元格數組而不是單個參數? – milenko

+1

你必須問作者,但其中一個原因可能是在一個變量中收集關於一個對象的所有信息。它使得傳遞信息變得更容易,因爲只能使用'tunestruct'而不是'samplefunc,numreps,data_type,MS_criterion'。你也可以爲此使用結構。 –

回答

1

tunestruct實際上是由一堆其他變量的cell array

單元格數組是一種數據類型,其索引數據容器稱爲單元格,其中每個單元格可以包含任何類型的數據。單元格數組通常包含文本字符串的列表,文本和數字的組合或不同大小的數字數組。

製作單元格數組而不是每次將這些參數作爲單獨值傳遞的原因是,代碼有一個非常特定的模式來處理這組參數,以防它們不作爲參數傳遞,在您提供的代碼段中描述:

if exist('tunestruct','var') 
    if ~iscell(tunestruct) 
     tunestruct = {tunestruct,1};  
    end; 

    if(strcmp(tunestruct{1},'furs')) 
    tunestruct{2} = 1; %furs is deterministic, only one repetition is enough 
    end 

    s1 = ~strcmp(tunestruct{3},'net_unw') && strcmp(tunestruct{4},'Modularity'); 
    if(s1) 
    tunestruct{4} = 'AMS'; %Modularity is used for unweighted network data 
    warning('\nNot possible to use Modularity, using AMS instead...'); 
    end 

end; 
+0

是什麼讓你認爲它是一個'struct'?看起來像一個單元陣列給我。 – Suever

+0

這實際上就是我的意思,並且在我發佈的代碼段中有這行'if〜iscell(tunestruct)'。我爲這個愚蠢的錯誤感到抱歉。 – nikaltipar