1. 随机数库

  1. numpy中的随机和分布函数模块有两种用法:函数式以及类式

1.1 函数式

  1. 随机数

    • numpy.random.rand(d0, d1, ..., dn):指定形状(d0, d1, ..., dn)创建一个随机的ndarray。每个元素值来自于半闭半开区间[0,1)并且服从均匀分布。

      • 要求d0, d1, ..., dn为整数
      • 如果未提供参数,则返回一个随机的浮点数而不是ndarray,浮点数值来自于半闭半开区间[0,1)并且服从均匀分布。
    • numpy.random.randn(d0, d1, ..., dn):指定形状(d0, d1, ..., dn)创建一个随机的ndarray。每个元素值服从正态分布,其中正态分布的期望为0,方差为1

      • 要求d0, d1, ..., dn为整数或者可以转换为整数
      • 如果di为浮点数,则截断成整数
      • 如果未提供参数,则返回一个随机的浮点数而不是ndarray,浮点数值服从正态分布,其中正态分布的期望为0,方差为1
    • numpy.random.randint(low[, high, size]):返回一个随机的整数ndarray或者一个随机的整数值。

      • 如果highNone,则表示整数值都取自[0,low)且服从discrete uniform分布
      • 如果high给出了值,则表示整数值都取自[low,high)且服从discrete uniform分布
      • size是一个整数的元组,指定了输出的ndarray的形状。如果为None则表示输出为单个整数值
    • numpy.random.random_integers(low[, high, size]):返回一个随机的整数ndarray或者一个随机的整数值。

      • 如果highNone,则表示整数值都取自[1,low]且服从discrete uniform分布
      • 如果high给出了值,则表示整数值都取自[low,high]且服从discrete uniform分布
      • size是一个整数的元组,指定了输出的ndarray的形状。如果为None则表示输出为单个整数值

      它与randint区别在于randint是半闭半开区间,而random_integers是全闭区间

    • numpy.random.random_sample([size]):返回一个随机的浮点ndarray或者一个随机的浮点值,浮点值是[0.0,1.0)之间均匀分布的随机数

      • size为整数元组或者整数,指定结果ndarray的形状。如果为None则只输出单个浮点数
      • 如果想生成[a,b)之间均匀分布的浮点数,那么你可以用(b-a)*random_sample()+a

      如果size有效,它的效果等于numpy.random.rand(*size); 如果size无效,它的效果等于numpy.random.rand()

      random_sample_int_float

    • numpy.random.random([size]):等价于numpy.random.random_sample([size])

    • numpy.random.ranf([size]):等价于numpy.random.random_sample([size])

    • numpy.random.sample([size]):等价于numpy.random.random_sample([size])

      random_sample_alias

    • numpy.random.choice(a[, size, replace, p]):从一维数组中采样产生一组随机数或者一个随机数

      • a为一位数组或者int,如果是int则采样数据由numpy.arange(n)提供,否则采用数据由a提供

      • size为整数元组或者整数,指定结果ndarray的形状。如果为None则只输单个值

      • replace:如果为True则可以重复采样(有放回的采样);如果为False,则采用不放回的采样

      • p:为一维数组,用于指定采样数组中每个元素值的采样概率。如果为None则均匀采样。

      • 如果参数有问题则抛出异常:比如a为整数但是小于0,比如p不满足概率和为1,等等。。

        random_choice

    • numpy.random.bytes(length):返回length长度的随机字节串。length指定字节长度。

      random_bytes

  2. 排列组合

    • numpy.random.shuffle(x):原地随机混洗x的内容,返回Nonexarray-like对象,原地修改它

    • numpy.random.permutation(x):随机重排x,返回重排后的ndarrayxarray-like对象,不会修改它

      • 如果x是个整数,则重排numpy.arange(x)

      • 如果x是个数组,则拷贝它然后对拷贝进行混洗

        • 如果x是个多维数则只是混洗它的第0维

      random_permutation

  3. 概率分布函数:下面是共同参数:size若非None,则它指定输出ndarray的形状。如果为None,则输出单个值。

    • numpy.random.beta(a, b[, size]):Beta分布。其中a,b都是Beta分布的参数,要求非负浮点数。

      • 贝塔分布为:

        1. 随机数库 - 图6

        其中:

        1. 随机数库 - 图7

    • numpy.random.binomial(n, p[, size]):二项分布。其中n,p都是二项分布的参数,要求n为大于等于0的浮点数,如果它为浮点数则截断为整数;p[0,1]之间的浮点数。

      • 二项分布为:

        1. 随机数库 - 图8

    • numpy.random.chisquare(df[, size]):卡方分布。其中df为整数,是卡方分布的自由度(若小于等于0则抛出异常)。

      • 卡方分布为:

        1. 随机数库 - 图9

        其中

        1. 随机数库 - 图10

    • numpy.random.dirichlet(alpha[, size]):狄利克雷分布。其中alpha是个数组,为狄利克雷分布的参数。

    • numpy.random.exponential([scale, size]):指数分布。scale为浮点数,是参数 1. 随机数库 - 图11

      • 指数分布的概率密度函数为:

        1. 随机数库 - 图12

    • numpy.random.f(dfnum, dfden[, size]):F分布。dfnum为浮点数,应该大于0,是分子的自由度; dfden是浮点数,应该大于0,是分母的自由度。

    • numpy.random.gamma(shape[, scale, size]):伽玛分布。其中shape是个大于0的标量,表示分布的形状;scale是个大于0的标量,表示伽玛分布的scale(默认为1)。

      • 伽玛分布的概率密度函数为:

        1. 随机数库 - 图13

        ,其中k为形状, 1. 随机数库 - 图14scale

    • numpy.random.geometric(p[, size]):几何分布。其中p是单次试验成功的概率。

      • 几何分布为:

        1. 随机数库 - 图15

    • numpy.random.gumbel([loc, scale, size]):甘贝尔分布。其中loc为浮点数,是分布的location of modescale是浮点数,为scale

      • 甘贝尔分布:

      • p(x)=\frac {e^{-(x-\mu)/\beta}}{\beta} e^{-e-(x-\mu)/\beta}

        Preview OK

        1. 随机数库 - 图16

        1. 随机数库 - 图17

        ,其中 1. 随机数库 - 图18location of mode1. 随机数库 - 图19scale

    • numpy.random.hypergeometric(ngood, nbad, nsample[, size]): 超几何分布。其中ngood为整数或者array_like,必须非负数,为好的选择;nbad为整数或者array_like,必须非负数,表示坏的选择。

      • 超级几何分布:

        1. 随机数库 - 图20

        ,其中n=ngoodm=nbadN为样本数量。P(x)x成功的概率

    • numpy.random.laplace([loc, scale, size]):拉普拉斯分布。loc为浮点数,scale为浮点数

      • 拉普拉斯分布:

        1. 随机数库 - 图21

        ,其中 loc\=1. 随机数库 - 图22scale\=1. 随机数库 - 图23

    • numpy.random.logistic([loc, scale, size]):逻辑斯谛分布。其中loc为浮点数,scale为大于0的浮点数

      • 逻辑斯谛分布:

        1. 随机数库 - 图24

        , 其中 loc\=1. 随机数库 - 图25, scale\= 1. 随机数库 - 图26

    • numpy.random.lognormal([mean, sigma, size]):对数正态分布。其中mean为浮点数,sigma为大于0的浮点数。

      • 对数正态分布:

        1. 随机数库 - 图27

        ,其中mean\=1. 随机数库 - 图28sigma\= 1. 随机数库 - 图29

    • numpy.random.logseries(p[, size]):对数分布,其中p[0.0--1.0]之间的浮点数。

      • 对数分布:

        1. 随机数库 - 图30

    • numpy.random.multinomial(n, pvals[, size]):多项式分布。n为执行二项分布的试验次数,pvals为浮点序列,要求这些序列的和为1,其长度为n

    • numpy.random.multivariate_normal(mean, cov[, size]):多元正态分布。mean为一维数组,长度为Ncov为二维数组,形状为(N,N)

    • numpy.random.negative_binomial(n, p[, size]):负二项分布。n为整数,大于0;p[0.0--1.0]之间的浮点数。

      • 负二项分布:

        1. 随机数库 - 图31

    • numpy.random.noncentral_chisquare(df, nonc[, size]):非中心卡方分布。df为整数,必须大于0;noc为大于0的浮点数。

      • 非中心卡方分布:

        1. 随机数库 - 图32

        其中 1. 随机数库 - 图33为卡方分布, dfknonc1. 随机数库 - 图34

    • numpy.random.noncentral_f(dfnum, dfden, nonc[, size]):非中心F分布。其中dfnum为大于1的整数,dfden为大于1的整数,nonc为大于等于0的浮点数。

    • numpy.random.normal([loc, scale, size]):正态分布。其中loc为浮点数,scale为浮点数。

      • 正态分布:

        1. 随机数库 - 图35

        ,其中loc\=1. 随机数库 - 图36scale\=1. 随机数库 - 图37

    • numpy.random.pareto(a[, size]):帕累托分布。其中a为浮点数。

      • 帕累托分布:

        1. 随机数库 - 图38

        ,其中a\=1. 随机数库 - 图39, mscale

    • numpy.random.poisson([lam, size]):泊松分布。其中lam为浮点数或者一个浮点序列(浮点数大于等于0)。

      • 泊松分布:

        1. 随机数库 - 图40

        ,其中lam\=1. 随机数库 - 图41

    • numpy.random.power(a[, size]):幂级数分布。其中a为大于0的浮点数。

      • 幂级数分布:

        1. 随机数库 - 图42

    • numpy.random.rayleigh([scale, size]): 瑞利分布。其中scale为大于0的浮点数。

      • 瑞利分布:

        1. 随机数库 - 图43

        ,其中scale\=1. 随机数库 - 图44

    • numpy.random.standard_cauchy([size]):标准柯西分布。

      • 柯西分布:

        1. 随机数库 - 图45

        ,其中标准柯西分布中, 1. 随机数库 - 图46

    • numpy.random.standard_exponential([size]):标准指数分布。其中scale等于1

    • numpy.random.standard_gamma(shape[, size]):标准伽玛分布,其中scale等于1

    • numpy.random.standard_normal([size]):标准正态分布,其中mean\=0,stdev等于1

    • numpy.random.standard_t(df[, size]):学生分布。其中df是大于0的整数。

      • 学生分布:

        1. 随机数库 - 图47

        , 其中 df\= 1. 随机数库 - 图48

    • numpy.random.triangular(left, mode, right[, size]): 三角分布。其中left为标量,mode为标量,right为标量

      • 三角分布(其中left\=lmode\=mright\=r):

      1. 随机数库 - 图49

    • numpy.random.uniform([low, high, size]):均匀分布。其中low为浮点数;high为浮点数。

      • 均匀分布:

        1. 随机数库 - 图50

        ,其中low\=a, high\=b

    • numpy.random.vonmises(mu, kappa[, size]):Mises分布。其中mu为浮点数,kappa为大于等于0的浮点数。

      • Mises分布:

        1. 随机数库 - 图51

        ,其中mu\=1. 随机数库 - 图52kappa\=1. 随机数库 - 图531. 随机数库 - 图54modified Bessel function of order 0

    • numpy.random.wald(mean, scale[, size]):Wald分布。其中mean为大于0的标量,scale为大于等于0的标量

      • Wald分布:

        1. 随机数库 - 图55

        ,其中mean\=1. 随机数库 - 图56scale\=1. 随机数库 - 图57

    • numpy.random.weibull(a[, size])Weibull分布。其中a是个浮点数。

      • Weibull分布:

        1. 随机数库 - 图58

        ,其中a\=1. 随机数库 - 图591. 随机数库 - 图60scale

    • numpy.random.zipf(a[, size]):齐夫分布。其中a为大于1的浮点数。

      • 齐夫分布:

        1. 随机数库 - 图61

        ,其中 a\=1. 随机数库 - 图621. 随机数库 - 图63Riemann Zeta函数。

  4. numpy.random.seed(seed=None):用于设置随机数生成器的种子。int是个整数或者数组,要求能转化成32位无符号整数。

1.2 RandomState类

  1. 类式用法主要使用numpy.random.RandomState类,它是一个Mersenne Twister伪随机数生成器的容器。它提供了一些方法来生成各种各样概率分布的随机数。

    构造函数:RandomState(seed)。其中seed可以为None, int, array_like。这个seed是初始化伪随机数生成器。如果seedNone,则RandomState会尝试读取/dev/urandom或者Windows analogure来读取数据,或用者clock来做种子。

    Pythonstdlib模块random也提供了一个Mersenne Twister伪随机数生成器。但是RandomState提供了更多的概率分布函数。

    RandomState保证了通过使用同一个seed以及同样参数的方法序列调用会产生同样的随机数序列(除了浮点数精度上的区别)。

    RandomState提供了一些方法来产生各种分布的随机数。这些方法都有一个共同的参数size

    • 如果sizeNone,则只产生一个随机数
    • 如果size为一个整数,则产生一个一维的随机数数组。
    • 如果size为一个元组,则生成一个多维的随机数数组。其中数组的形状由元组指定。
  2. 生成随机数的方法

    • .bytes(length):等效于numpy.random.bytes(...)函数
    • .choice(a[, size, replace, p]):等效于numpy.random.choice(...)函数
    • .rand(d0, d1, ..., dn):等效于numpy.random.rand(...)函数
    • .randint(low[, high, size]):等效于numpy.random.randint(...)函数
    • .randn(d0, d1, ..., dn) :等效于numpy.random.randn(...)函数
    • .random_integers(low[, high, size]):等效于numpy.random_integers.bytes(...)函数
    • .random_sample([size]):等效于numpy.random.random_sample(...)函数
    • .tomaxint([size]):等效于numpy.random.tomaxint(...)函数
  3. 排列组合的方法

    • .shuffle(x):等效于numpy.random.shuffle(...)函数
    • .permutation(x) :等效于numpy.random.permutation(...)函数
  4. 指定概率分布函数的方法

    • .beta(a, b[, size]):等效于numpy.random.beta(...)函数
    • .binomial(n, p[, size]):等效于numpy.random.binomial(...)函数
    • .chisquare(df[, size]):等效于numpy.random.chisquare(...)函数
    • .dirichlet(alpha[, size]):等效于numpy.random.dirichlet(...)函数
    • .exponential([scale, size]):等效于numpy.random.exponential(...)函数
    • .f(dfnum, dfden[, size]):等效于numpy.random.f(...)函数
    • .gamma(shape[, scale, size]):等效于numpy.random.gamma(...)函数
    • .geometric(p[, size]):等效于numpy.random.geometric(...)函数
    • .gumbel([loc, scale, size]):等效于numpy.random.gumbel(...)函数
    • .hypergeometric(ngood, nbad, nsample[, size]):等效于numpy.random.hypergeometric(...)函数
    • .laplace([loc, scale, size]):等效于numpy.random.laplace(...)函数
    • .logistic([loc, scale, size]):等效于numpy.random.logistic(...)函数
    • .lognormal([mean, sigma, size]):等效于numpy.random.lognormal(...)函数
    • .logseries(p[, size]):等效于numpy.random.logseries(...)函数
    • .multinomial(n, pvals[, size]):等效于numpy.random.multinomial(...)函数
    • .multivariate_normal(mean, cov[, size]):等效于numpy.random.multivariate_normal(...)函数
    • .negative_binomial(n, p[, size]):等效于numpy.random.negative_binomial(...)函数
    • .noncentral_chisquare(df, nonc[, size]):等效于numpy.random.noncentral_chisquare(...)函数
    • .noncentral_f(dfnum, dfden, nonc[, size]):等效于numpy.random.noncentral_f(...)函数
    • .normal([loc, scale, size]):等效于numpy.random.normal(...)函数
    • .pareto(a[, size]):等效于numpy.random.pareto(...)函数 -. poisson([lam, size]):等效于numpy.random.poisson(...)函数
    • .power(a[, size]):等效于numpy.random.power(...)函数
    • .rayleigh([scale, size]):等效于numpy.random.rayleigh(...)函数
    • .standard_cauchy([size]):等效于numpy.random.standard_cauchy(...)函数
    • .standard_exponential([size]):等效于numpy.random.standard_exponential(...)函数
    • .standard_gamma(shape[, size]):等效于numpy.random.standard_gamma(...)函数
    • .standard_normal([size]):等效于numpy.random.standard_normal(...)函数
    • .standard_t(df[, size]):等效于numpy.random.standard_t(...)函数
    • .triangular(left, mode, right[, size]):等效于numpy.random.triangular(...)函数
    • .uniform([low, high, size]):等效于numpy.random.uniform(...)函数
    • .vonmises(mu, kappa[, size]):等效于numpy.random.vonmises(...)函数
    • .wald(mean, scale[, size]):等效于numpy.random.wald(...)函数
    • .weibull(a[, size]):等效于numpy.random.weibull(...)函数
    • .zipf(a[, size]):等效于numpy.random.zipf(...)函数
  5. 类式的其他函数

    • seed(seed=None):该方法在RandomState被初始化时自动调用,你也可以反复调用它从而重新设置伪随机数生成器的种子。

    • get_state():该方法返回伪随机数生成器的内部状态。其结果是一个元组(str, ndarray of 624 uints, int, int, float),依次为:

      • 字符串'MT19937'
      • 一维数组,其中是624个无符号整数key
      • 一个整数pos
      • 一个整数has_gauss
      • 一个浮点数cached_gaussian
    • set_state(state):该方法设置伪随机数生成器的内部状态,如果执行成功则返回None。参数是个元组(str, ndarray of 624 uints, int, int, float),依次为:

      • 字符串'MT19937'
      • 一维数组,其中是624个无符号整数key
      • 一个整数pos
      • 一个整数has_gauss
      • 一个浮点数cached_gaussian