1. 随机数库
numpy
中的随机和分布函数模块有两种用法:函数式以及类式
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
或者一个随机的整数值。- 如果
high
为None
,则表示整数值都取自[0,low)
且服从discrete uniform
分布 - 如果
high
给出了值,则表示整数值都取自[low,high)
且服从discrete uniform
分布 size
是一个整数的元组,指定了输出的ndarray
的形状。如果为None
则表示输出为单个整数值
- 如果
numpy.random.random_integers(low[, high, size])
:返回一个随机的整数ndarray
或者一个随机的整数值。- 如果
high
为None
,则表示整数值都取自[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()
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])
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
,等等。。
numpy.random.bytes(length)
:返回length
长度的随机字节串。length
指定字节长度。
排列组合
numpy.random.shuffle(x)
:原地随机混洗x
的内容,返回None
。x
为array-like
对象,原地修改它numpy.random.permutation(x)
:随机重排x
,返回重排后的ndarray
。x
为array-like
对象,不会修改它如果
x
是个整数,则重排numpy.arange(x)
如果
x
是个数组,则拷贝它然后对拷贝进行混洗- 如果
x
是个多维数则只是混洗它的第0维
- 如果
概率分布函数:下面是共同参数:
size
若非None
,则它指定输出ndarray
的形状。如果为None
,则输出单个值。numpy.random.beta(a, b[, size])
:Beta分布。其中a,b
都是Beta分布的参数,要求非负浮点数。贝塔分布为:
其中:
numpy.random.binomial(n, p[, size])
:二项分布。其中n,p
都是二项分布的参数,要求n
为大于等于0的浮点数,如果它为浮点数则截断为整数;p
为[0,1]
之间的浮点数。二项分布为:
numpy.random.chisquare(df[, size])
:卡方分布。其中df
为整数,是卡方分布的自由度(若小于等于0则抛出异常)。卡方分布为:
其中
numpy.random.dirichlet(alpha[, size])
:狄利克雷分布。其中alpha
是个数组,为狄利克雷分布的参数。numpy.random.exponential([scale, size])
:指数分布。scale
为浮点数,是参数指数分布的概率密度函数为:
numpy.random.f(dfnum, dfden[, size])
:F
分布。dfnum
为浮点数,应该大于0,是分子的自由度;dfden
是浮点数,应该大于0,是分母的自由度。numpy.random.gamma(shape[, scale, size])
:伽玛分布。其中shape
是个大于0的标量,表示分布的形状;scale
是个大于0的标量,表示伽玛分布的scale
(默认为1)。伽玛分布的概率密度函数为:
,其中
k
为形状, 为scale
numpy.random.geometric(p[, size])
:几何分布。其中p
是单次试验成功的概率。几何分布为:
numpy.random.gumbel([loc, scale, size])
:甘贝尔分布。其中loc
为浮点数,是分布的location of mode
,scale
是浮点数,为scale
。甘贝尔分布:
p(x)=\frac {e^{-(x-\mu)/\beta}}{\beta} e^{-e-(x-\mu)/\beta}
Preview OK
,其中 为
location of mode
, 为scale
numpy.random.hypergeometric(ngood, nbad, nsample[, size])
: 超几何分布。其中ngood
为整数或者array_like
,必须非负数,为好的选择;nbad
为整数或者array_like
,必须非负数,表示坏的选择。超级几何分布:
,其中
n=ngood
,m=nbad
,N
为样本数量。P(x)
为x
成功的概率
numpy.random.laplace([loc, scale, size])
:拉普拉斯分布。loc
为浮点数,scale
为浮点数拉普拉斯分布:
,其中
loc
\= ,scale
\=
numpy.random.logistic([loc, scale, size])
:逻辑斯谛分布。其中loc
为浮点数,scale
为大于0的浮点数逻辑斯谛分布:
, 其中
loc
\=,scale
\=
numpy.random.lognormal([mean, sigma, size])
:对数正态分布。其中mean
为浮点数,sigma
为大于0的浮点数。对数正态分布:
,其中
mean
\= ,sigma
\=
numpy.random.logseries(p[, size])
:对数分布,其中p
为[0.0--1.0]
之间的浮点数。对数分布:
numpy.random.multinomial(n, pvals[, size])
:多项式分布。n
为执行二项分布的试验次数,pvals
为浮点序列,要求这些序列的和为1,其长度为n
。numpy.random.multivariate_normal(mean, cov[, size])
:多元正态分布。mean
为一维数组,长度为N
;cov
为二维数组,形状为(N,N)
numpy.random.negative_binomial(n, p[, size])
:负二项分布。n
为整数,大于0;p
为[0.0--1.0]
之间的浮点数。负二项分布:
numpy.random.noncentral_chisquare(df, nonc[, size])
:非中心卡方分布。df
为整数,必须大于0;noc
为大于0的浮点数。非中心卡方分布:
其中 为卡方分布,
df
为k
,nonc
为
numpy.random.noncentral_f(dfnum, dfden, nonc[, size])
:非中心F
分布。其中dfnum
为大于1的整数,dfden
为大于1的整数,nonc
为大于等于0的浮点数。numpy.random.normal([loc, scale, size])
:正态分布。其中loc
为浮点数,scale
为浮点数。正态分布:
,其中
loc
\=,scale
\=
numpy.random.pareto(a[, size])
:帕累托分布。其中a
为浮点数。帕累托分布:
,其中
a
\=,m
为scale
numpy.random.poisson([lam, size])
:泊松分布。其中lam
为浮点数或者一个浮点序列(浮点数大于等于0)。泊松分布:
,其中
lam
\=
numpy.random.power(a[, size])
:幂级数分布。其中a
为大于0的浮点数。幂级数分布:
numpy.random.rayleigh([scale, size])
: 瑞利分布。其中scale
为大于0的浮点数。瑞利分布:
,其中
scale
\=
numpy.random.standard_cauchy([size])
:标准柯西分布。柯西分布:
,其中标准柯西分布中,
numpy.random.standard_exponential([size])
:标准指数分布。其中scale
等于1numpy.random.standard_gamma(shape[, size])
:标准伽玛分布,其中scale
等于1numpy.random.standard_normal([size])
:标准正态分布,其中mean
\=0,stdev
等于1numpy.random.standard_t(df[, size])
:学生分布。其中df
是大于0的整数。学生分布:
, 其中
df
\=
numpy.random.triangular(left, mode, right[, size])
: 三角分布。其中left
为标量,mode
为标量,right
为标量- 三角分布(其中
left
\=l
,mode
\=m
,right
\=r
):
- 三角分布(其中
numpy.random.uniform([low, high, size])
:均匀分布。其中low
为浮点数;high
为浮点数。均匀分布:
,其中
low
\=a
,high
\=b
numpy.random.vonmises(mu, kappa[, size])
:Mises
分布。其中mu
为浮点数,kappa
为大于等于0的浮点数。Mises
分布:,其中
mu
\=,kappa
\=, 是modified Bessel function of order 0
numpy.random.wald(mean, scale[, size])
:Wald
分布。其中mean
为大于0的标量,scale
为大于等于0的标量Wald
分布:,其中
mean
\=,scale
\=
numpy.random.weibull(a[, size])
:Weibull
分布。其中a
是个浮点数。Weibull
分布:,其中
a
\=, 为scale
numpy.random.zipf(a[, size])
:齐夫分布。其中a
为大于1的浮点数。齐夫分布:
,其中
a
\=, 为Riemann Zeta
函数。
numpy.random.seed(seed=None)
:用于设置随机数生成器的种子。int
是个整数或者数组,要求能转化成32位无符号整数。
1.2 RandomState类
类式用法主要使用
numpy.random.RandomState
类,它是一个Mersenne Twister
伪随机数生成器的容器。它提供了一些方法来生成各种各样概率分布的随机数。构造函数:
RandomState(seed)
。其中seed
可以为None
,int
,array_like
。这个seed
是初始化伪随机数生成器。如果seed
为None
,则RandomState
会尝试读取/dev/urandom
或者Windows analogure
来读取数据,或用者clock
来做种子。Python
的stdlib
模块random
也提供了一个Mersenne Twister
伪随机数生成器。但是RandomState
提供了更多的概率分布函数。RandomState
保证了通过使用同一个seed
以及同样参数的方法序列调用会产生同样的随机数序列(除了浮点数精度上的区别)。RandomState
提供了一些方法来产生各种分布的随机数。这些方法都有一个共同的参数size
。- 如果
size
为None
,则只产生一个随机数 - 如果
size
为一个整数,则产生一个一维的随机数数组。 - 如果
size
为一个元组,则生成一个多维的随机数数组。其中数组的形状由元组指定。
- 如果
生成随机数的方法
.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(...)
函数
排列组合的方法
.shuffle(x)
:等效于numpy.random.shuffle(...)
函数.permutation(x)
:等效于numpy.random.permutation(...)
函数
指定概率分布函数的方法
.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(...)
函数
类式的其他函数
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
- 字符串