numpy产生随机数

本文转自博客:http://blog.csdn.net/jinxiaonian11/article/details/53143141


在数据分析中,数据的获取是第一步,numpy.random 模块提供了非常全的自动产生数据API,是学习数据分析的第一步。 
总体来说,numpy.random模块分为四个部分,对应四种功能: 
1. 简单随机数: 产生简单的随机数据,可以是任何维度 
2. 排列:将所给对象随机排列 
3. 分布:产生指定分布的数据,如高斯分布等 
4. 生成器:种随机数种子,根据同一种子产生的随机数是相同的 

以下是详细内容以及代码实例:(以下代码默认已导入numpy:import numpy as np )


1. 生成器

电脑产生随机数需要明白以下几点: 
(1)随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。 
(2)只要用户不设置随机种子,那么在默认情况下随机种子来自系统时钟(即定时/计数器的值) 
(3)随机数产生的算法与系统有关,Windows和Linux是不同的,也就是说,即便是随机种子一样,不同系统产生的随机数也不一样。 
numpy.random 设置种子的方法有:

函数名称函数功能参数说明
RandomState定义种子类RandomState是一个种子类,提供了各种种子方法,最常用seed
seed([seed])定义全局种子参数为整数或者矩阵

代码示例:

np.random.seed(1234) #设置随机种子为1234


2. 简单随机数

函数名称函数功能参数说明
rand(d0, d1, …, dn)产生均匀分布的随机数dn为第n维数据的维度
randn(d0, d1, …, dn)产生标准正态分布随机数dn为第n维数据的维度
randint(low[, high, size, dtype])产生随机整数low:最小值;high:最大值;size:数据个数
random_sample([size])在[0,1)内产生随机数size:随机数的shape,可以为元祖或者列表,[2,3]表示2维随机数,维度为(2,3)
random([size])同random_sample([size])同random_sample([size])
ranf([size])同random_sample([size])同random_sample([size])
sample([size]))同random_sample([size])同random_sample([size])
choice(a[, size, replace, p])从a中随机选择指定数据a:1维数组 size:返回数据形状
bytes(length)返回随机位length:位的长度

代码示例

>>> import numpy as np
>>> print(np.random.rand(2,3))  #产生2行三列均匀分布随机数组
[[ 0.00764233  0.3830022   0.55875737]

 [ 0.33188605  0.63720051  0.69983149]]

>>> print(np.random.randn(3,3))  #三行三列正态分布随机数据
[[-2.25581993  0.28401035 -0.39071727]
 [ 0.3554526  -0.79093564 -0.31146916]

 [ 1.02469652  0.12776135  2.28273697]]

>>> print(np.random.randint(1,100,[5,5]))   #(1,100)以内的5行5列随机整数
[[ 3  8 17 93 18]
 [49 88 24 74 90]
 [31 49 36 20 33]
 [ 6 10 91 82 18]

 [26  8 76 90 55]]

>>> print(np.random.random(10))  #(0,1)以内10个随机浮点数
[ 0.68046894  0.99589507  0.55610842  0.28758456  0.7304742   0.5175079

  0.06014449  0.58060165  0.03519808  0.77347185]

3. 分布

numpy.random模块提供了产生各种分布随机数的API:

函数名称函数功能参数说明
beta(a, b[, size])贝塔分布样本,在 [0, 1]内。 
binomial(n, p[, size])二项分布的样本。 
chisquare(df[, size])卡方分布样本。 
dirichlet(alpha[, size])狄利克雷分布样本。 
exponential([scale, size])指数分布 
f(dfnum, dfden[, size])F分布样本。 
gamma(shape[, scale, size])伽马分布 
geometric(p[, size])几何分布 
gumbel([loc, scale, size])耿贝尔分布。 
hypergeometric(ngood, nbad, nsample[, size])超几何分布样本。 
laplace([loc, scale, size])拉普拉斯或双指数分布样本 
logistic([loc, scale, size])Logistic分布样本 
lognormal([mean, sigma, size])对数正态分布 
logseries(p[, size])对数级数分布。 
multinomial(n, pvals[, size])多项分布 
multivariate_normal(mean, cov[, size])多元正态分布。 
negative_binomial(n, p[, size])负二项分布 
noncentral_chisquare(df, nonc[, size])非中心卡方分布 
noncentral_f(dfnum, dfden, nonc[, size])非中心F分布 
normal([loc, scale, size])正态(高斯)分布 
pareto(a[, size])帕累托(Lomax)分布 
poisson([lam, size])泊松分布 
power(a[, size])Draws samples in [0, 1] from a power distribution with positive exponent a - 1. 
rayleigh([scale, size])Rayleigh 分布 
standard_cauchy([size])标准柯西分布 
standard_exponential([size])标准的指数分布 
standard_gamma(shape[, size])标准伽马分布 
standard_normal([size])标准正态分布 (mean=0, stdev=1). 
standard_t(df[, size])Standard Student’s t distribution with df degrees of freedom. 
triangular(left, mode, right[, size])三角形分布 
uniform([low, high, size])均匀分布 
vonmises(mu, kappa[, size])von Mises分布 
wald(mean, scale[, size])瓦尔德(逆高斯)分布 
weibull(a[, size])Weibull 分布 
zipf(a[, size])齐普夫分布 

代码示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> mu=1    #数学期望:1
>>> sigma=3   #标准差:3
>>> num=10000   #个数:10000
>>> rand_data = np.random.normal(mu, sigma, num)
>>> count, bins, ignored = plt.hist(rand_data, 30, normed=True)
>>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2)), linewidth=2, color='r')
[<matplotlib.lines.Line2D object at 0x7f29dc3d9128>]

>>> plt.show()



4. 排列

函数名称函数功能参数说明
shuffle(x)打乱对象x(多维矩阵按照第一维打乱)矩阵或者列表
permutation(x)打乱并返回该对象(多维矩阵按照第一维打乱)整数或者矩阵

代码示例

>>> import numpy as np
>>> rand_data=np.random.randint(1,10,(3,4))
>>> print(rand_data)
[[4 4 6 9]
 [3 4 2 2]
 [3 9 3 3]]
>>> np.random.shuffle(rand_data)
>>> print(rand_data)
[[4 4 6 9]
 [3 9 3 3]
 [3 4 2 2]]
  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值