2016-11-30 60 views
-1

以下函數產生錯誤。錯誤:元素編號2在返回列表中未定義

function [retval] = select_red(train, test) 
% shuffle test/data points 
    shuffled_test = test(randperm(size(test, 1)), :); 

    clubs  = shuffled_test(shuffled_test(:, 1) == 1, :); 
    diamonds = shuffled_test(shuffled_test(:, 1) == 2, :); 
    hearts = shuffled_test(shuffled_test(:, 1) == 3, :); 
    spades = shuffled_test(shuffled_test(:, 1) == 4, :); 

    clubs = clubs(1: floor(size(clubs,1)/2),:); 
    spades = spades(1: floor(size(spades,1)/2),:); 

    shuffled_test = [clubs ; diamonds ; hearts ; spades]; 

    shuffled_test = shuffled_test(randperm(size(shuffled_test, 1)), :); 

    ercf_indep = bayescls(train, shuffled_test, @pdfindep, 0.25 * ones(1,4), 0.1); 
    ercf_dep = bayescls(train, shuffled_test, @pdfdep, 0.25 * ones(1,4), 0.1); 
    ercf_parzen = bayescls(train, shuffled_test, @pdfparzen, 0.25 * ones(1,4), 0.1); 

    retval = [ercf_indep ercf_dep ercf_parzen]; 
endfunction 

使用

>> [errindep errdep errparzen] = select_red(train, test) 
errindep = 

    0.1089181 0.0029240 0.2309942 

    error: element number 2 undefined in return list 

你能告訴爲什麼會產生一個錯誤信息?

回答

4

您對功能太差的問題要求太高。你需要三個輸出,它只能提供一個(這是一個包含三個數字的向量)。

  • 如果你想要的功能,產生三個數字作爲獨立的輸出,其聲明爲

    [ercf_indep, ercf_dep, ercf_parzen] = select_red(train, test) 
    

    ,並在年底將其清除retval = ...

  • 如果你不想修改功能,你需要一個輸出稱呼它:

    out = select_red(train, test); 
    

    然後解包輸出到三個數字:

    ercf_indep_out = out(1) 
    ercf_dep = out(2); 
    ercf_parzen = out(3); 
    

    或者拆包可以使用從單元陣列生成的逗號分隔列表完成:

    out_cell = num2cell(out); 
    [ercf_indep_out, ercf_dep, ercf_parzen] = out_cell{:}