尺寸输入必须是标量

问题描述:

有人可以请解释我如何解决错误“尺寸输入必须是标量”?当我在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

按照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