2017-04-27 125 views
0

有人可以請解釋我如何解決錯誤「尺寸輸入必須是標量」?當我在MATLAB中運行的代碼是否能夠正常工作,但是當我運行編譯EXE我得到這個錯誤:尺寸輸入必須是標量

Error using randperm

Size inputs must be scalar.

Error in randsample (line 162)

Error in 'mycode' (line .'indexesWith0=randsample(1:n-sumboo,nToAnalyze-sumboo); % '..)

MATLAB:NonScalarInput

nToAnalyze=options.nToAnalyze; 
if isempty(nToAnalyze) 
    Exclude=''; 
else 
    if nToAnalyze >n 
     error(['nToAnalyze must be smaller or equal than ' num2str(n)]) 
    end 
    boo=double_y ==1; % 
    notboo=~boo; % 
    sumboo=sum(boo); % 
    seq=1:n; % 

     indToExtractWith0=seq(notboo); % indexes of units which have 0 
     indexesWith0=randsample(1:n-sumboo,nToAnalyze-sumboo); % 
     UnitsToAnalyzeWith0=indToExtractWith0(indexesWith0); % 
     UnitsToanalyze=[seq(boo) UnitsToAnalyzeWith0]; % 
     Exclude=setdiff(seq,UnitsToanalyze); % 
end 

謝謝

+0

可以檢查提供randsample – m7913d

+0

你給輸入到溫控功能的值,被supposd的那些是大小,標量。 –

+0

randsample(1:n-sumboo,nToAnalyze-sumboo); 「1:n-sumboo」是一個雙數組(1x348392),而nToAnalyze-sumboo是一個標量(值= 78887)...謝謝 – Dori

回答

0

按照MATLAB help有使用randsample有兩種方式兩個輸入參數:

y = randsample(n,k) returns a k-by-1 vector y of values sampled uniformly at random, without replacement, from the integers 1 to n.

y = randsample(population,k) returns a vector of k values sampled uniformly at random, without replacement, from the values in the vector population. The orientation of y (row or column) is the same as population.

所以這是法律提供一個向量的第一個參數,n,而不是第二個, k

如果你看看randsample功能(類型edit randsample)內轉到行162,你可以看到,實際上將引發此錯誤的命令是

y = y(randperm(k)); 

其中k是第二個參數randsample。所以它看起來好像在某種程度上,當你運行編譯後的代碼時,結果是nToAnalyze-sumboo的值是一個向量,而不是一個標量,而當你在編輯器中測試你的代碼時,你並沒有複製這種情況。

這可能發生,如果options.nToAnalyze是一個向量;如果double_y是矩陣(尺寸2或更高),則boo將具有相同的尺寸,並且sum(boo)將具有更小的尺寸。檢查你的代碼的其餘部分,找出其中任何一個可能發生的地方。

+0

我修改了代碼後編譯了「indexesWith0 = randsample(n -sumboo,nToAnalyze-sumboo)「但我得到了同樣的錯誤......謝謝 – Dori

+0

好的,我更仔細地檢查了'randsample'的幫助。請參閱編輯。 – nekomatic

+0

我通過引入這一行解決了這個問題:'if〜isnumeric(nToAnalyze) nToAnalyze = str2double(nToAnalyze); end'。謝謝 – Dori