尺寸输入必须是标量
有人可以请解释我如何解决错误“尺寸输入必须是标量”?当我在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
谢谢
按照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)
将具有更小的尺寸。检查你的代码的其余部分,找出其中任何一个可能发生的地方。
可以检查提供randsample – m7913d
你给输入到温控功能的值,被supposd的那些是大小,标量。 –
randsample(1:n-sumboo,nToAnalyze-sumboo); “1:n-sumboo”是一个双数组(1x348392),而nToAnalyze-sumboo是一个标量(值= 78887)...谢谢 – Dori