randi(x,y,1)和randsample(x,y,true)之间有什么区别?

时间:2017-11-14 17:15:40

标签: matlab function random built-in

我通常使用randsample,但我遇到randi,我想知道是否有任何区别。

例如,这些似乎都是从[1,10]中挑选随机数并返回10 x 1向量:

n = randi(10,10,1);
n2 = randsample(10,10,true);

这两行代码之间有什么区别?

1 个答案:

答案 0 :(得分:2)

让我们考虑两个来源:

  1. randsample的文档,我们在其中看到:
      

    y = randsample(s,...)使用流s生成随机数。 sRandStream类的成员。默认值为MATLAB®默认随机数流。

  2. randsampleCopyright 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
    ...
    
  3. 从上面我们学到以下内容:

    • 在某些情况下,randsample的输入才会重定向到randi
    • 边缘情况的行为略有不同,例如randi(0,0,1)(哪些错误)与randsample(0,0,true)(输出空数组)。

    通常randsample有更多功能:它可以处理非默认RandStream和加权。