numpy(九)——随机函数

numpy(九)——随机函数

import numpy as np
  • 正态分布下的随机数生成

生成标准正态分布下的随机数

np.random.normal(size=(3,3))
array([[ 0.33125546, -0.03813279,  1.68894202],
       [ 1.73687994,  0.47303113,  0.14462729],
       [ 1.01391194,  1.56574933, -0.91014962]])

当然,你也可以指定分布的均值和标准差。这样产生的随机数将不是标准正态分布下的样本值

np.random.normal(1,2,size=(3,4)) #均值为1,标准差为2
array([[ 2.43916315,  0.93752771,  1.26341829,  0.29229485],
       [ 6.16909669,  4.44662107, -0.77711818, -2.03270126],
       [ 0.4827822 ,  2.10361979,  0.04770468, -2.18212697]])

randn方法和normal方法完全一致,也是产生标准正态分布下的随机样本值。不过,randn方法通用性更差一点,只能产生标准正态分布下的随机数样本值

np.random.randn(3,4)
array([[ 1.44784378,  0.52451147, -1.61612565, -1.75845933],
       [-1.06777382,  0.6266391 , -0.29627549, -0.18429023],
       [ 0.74290214,  1.86379803,  1.45410981,  0.14519321]])
  • 均匀分布下的随机数生成

[0,1)均匀分布下的随机数样本值生成

np.random.rand(3,4)
array([[ 0.7004642 ,  0.64168043,  0.60636248,  0.682579  ],
       [ 0.56245929,  0.70101596,  0.46811763,  0.15248406],
       [ 0.59708816,  0.49116559,  0.15618211,  0.08860918]])

np.random.uniform方法也是生成均匀分布下的随机值,但是通用性更好,可以自定义均匀分布的区间

np.random.uniform(0,5,(3,4)) #[0,5)均匀分布下的值
array([[ 2.16644588,  0.63377488,  4.05355761,  3.76887509],
       [ 0.49697361,  3.78121384,  1.82413589,  3.41500968],
       [ 2.41906341,  3.96646679,  0.5711994 ,  4.39522719]])
  • 随机整数生成

randint函数可以生成[a,b)区间内的随机整数

np.random.randint(2,10,(3,3))
array([[9, 6, 6],
       [3, 5, 2],
       [6, 3, 4]])
  • 随机数种子

随机数种子可以保证生成的随机数值相同,numpy中有两种方式生成一个随机数种子

  • 全局环境下的随机数种子

用seed方法可在全局的环境下生成一个随机数种子,全局的意思就是这颗种子是公用的,一旦生成,任何下一个随机函数都将使用这颗种子。而用完后种子就失效了,需要重新生成。

np.random.seed(1234)
np.random.normal(size=(3,3))
array([[ 0.47143516, -1.19097569,  1.43270697],
       [-0.3126519 , -0.72058873,  0.88716294],
       [ 0.85958841, -0.6365235 ,  0.01569637]])
np.random.seed(1234)
np.random.normal(size=(3,3))
array([[ 0.47143516, -1.19097569,  1.43270697],
       [-0.3126519 , -0.72058873,  0.88716294],
       [ 0.85958841, -0.6365235 ,  0.01569637]])
np.random.normal(size=(3,3))
array([[ -2.24268495e+00,   1.15003572e+00,   9.91946022e-01],
       [  9.53324128e-01,  -2.02125482e+00,  -3.34077366e-01],
       [  2.11836468e-03,   4.05453412e-01,   2.89091941e-01]])
  • 面向对象环境下的随机数种子

与全局环境下的种子不同的是,RandomState方法返回一个种子对象,将生成的种子保存在该对象中。通过调用该种子对象上的随机数方法,才可以触发该种子。
要注意的是,即使将种子保存在一个对象中,该种子也只能被调用一次,第二次调用将会失效,而由另一个事先没有被规定的随机的种子代替执行随机函数

seed = np.random.RandomState(1234)
np.random.normal(size=(3,3))
array([[-0.39784023,  0.33743765,  1.04757857],
       [ 1.04593826,  0.86371729, -0.12209157],
       [ 0.12471295, -0.32279481,  0.84167471]])
seed.normal(size=(3,3))
array([[ 0.47143516, -1.19097569,  1.43270697],
       [-0.3126519 , -0.72058873,  0.88716294],
       [ 0.85958841, -0.6365235 ,  0.01569637]])
seed.normal(size=(3,3)) #当再次调用原来的1234种子已经失效,因此产生的值发生了不同
array([[-1.81702723, -0.18310854,  1.05896919],
       [-0.39784023,  0.33743765,  1.04757857],
       [ 1.04593826,  0.86371729, -0.12209157]])

更多信息见《利用Python进行数据分析 第二版》P119

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值