有人可以解释我如何解决错误"尺寸输入必须是标量"?当我在matlab中运行代码时,它可以正常工作,但是当我运行编译的exe时,我得到了这个错误:
使用randperm时出错
大小输入必须是标量。
randsample中的错误(第162行)
mycode'错误(线 。' 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 :(得分:0)
根据MATLAB help,有两种方法可以使用randsample
和两个输入参数:
y = randsample(n,k)返回采样值的k-by-1向量y 从整数1到n均匀随机地,无需替换。
y = randsample(population,k)返回采样的k值向量 统一随机,无需替换,从中的值 矢量人口。 y(行或列)的方向与 人口。
因此,为第一个参数n
提供矢量是合法的,但不能为第二个参数k
提供矢量。
如果您查看randsample函数(类型edit randsample
)并转到第162行,您可以看到实际抛出此错误的命令是
y = y(randperm(k));
其中k
是randsample
的第二个参数。所以看起来好像在某种程度上,当你运行已编译的代码时,你最终会得到一个nToAnalyze-sumboo
的值,它是一个向量而不是一个标量,你只是在测试你的时候没有复制这个案例。编辑器中的代码。
如果options.nToAnalyze
是向量,则可能发生这种情况;如果double_y
是矩阵(维度2或更高),也会发生这种情况,因为boo
将具有相同的维度,sum(boo)
将减少一个维度。检查代码的其余部分,找出其中任何一个可能发生的位置。