我通常使用randsample
,但我遇到randi
,我想知道是否有任何区别。
例如,这些似乎都是从[1,10]中挑选随机数并返回10 x 1向量:
n = randi(10,10,1);
n2 = randsample(10,10,true);
这两行代码之间有什么区别?
答案 0 :(得分:2)
让我们考虑两个来源:
randsample
的文档,我们在其中看到:
y = randsample(s,...)
使用流s
生成随机数。s
是RandStream
类的成员。默认值为MATLAB®默认随机数流。
randsample
(Copyright 1993-2010 The MathWorks, Inc.
)的源代码,当第3个输入为true
时,我们会发现以下行为:
% Sample with replacement
case {true, 'true', 1}
if n == 0
if k == 0
y = zeros(0,1);
else
error(message('stats:randsample:EmptyPopulation'));
end
elseif isempty(w)
if defaultStream
y = randi(n,k,1);
else
y = randi(s,n,k,1);
end
else
% Irrelevant case as it concerns weighting which randi doesn't support.
end
...
从上面我们学到以下内容:
randsample
的输入才会重定向到randi
。randi(0,0,1)
(哪些错误)与randsample(0,0,true)
(输出空数组)。通常randsample
有更多功能:它可以处理非默认RandStream
和加权。