0
点赞
收藏
分享

微信扫一扫

Numpy - 随机模块

当我们指定数组时,希望数组中的值是随机值时,就需要用到 numpy.random 模块。

np.random.rand

使用 np.random.rand 构造一个 2 行 3 列的数组,item 为 0~1 之间的随机浮点数:

>> import numpy as np
>> np.random.rand(2,3)
array([[0.71602442, 0.54224407, 0.4217332 ],
       [0.408747  , 0.36258612, 0.40360511]])

下面,为了让打印结果更直观,我们设置 np.set_printoptions(precision=2) ,再次执行上述语句:

>> np.random.rand(2,3)
array([[0.09, 0.86, 0.68],
       [0.48, 0.24, 0.38]])

上述打印结果, ndarray 中的值均保留了小数点后 2 位,并且数值也发生变化,因为每次都是随机生成的。

np.random.randint

使用 np.random.randint 将以数组形式返回指定区间内的整数,下面返回由 [0, 10) 区间内的随机整数构成的 5 行 4 列的 ndarray

>> np.random.randint(10, size=(5,4))
array([[4, 7, 2, 0],
       [3, 1, 6, 7],
       [1, 2, 0, 2],
       [5, 4, 7, 8],
       [0, 2, 3, 6]])

返回由 [2, 5) 区间内的随机整数构成的 3 行 4 列的 ndarray

>> np.random.randint(2,5,size=(3,4))
array([[4, 4, 4, 2],
       [4, 4, 4, 2],
       [2, 4, 3, 2]])

[0,10) 之间随机选择 3 个数,以 1 维度数组返回:

>> np.random.randint(0,10,3)
array([4, 3, 1])

np.random.rand / np.random.random_sample

返回 0~1 区间随机的一个浮点数:

>> np.random.rand()
0.6790958187452498
>> np.random.random_sample()
0.5049857220325276

高斯分布

产生 10 个数字,符合均值为 0 ,方差为 1 的高斯分布:

>> mu, sigma = 0, 1
>> n = np.random.normal(mu, sigma, 10)
>> n
array([-2.74,  0.21,  1.03, -0.75,  0.97, -0.21,  0.33,  1.51,  0.82,
        0.26])

np.random.shuffle

np.random.shuffle 可以对 ndarray 进行洗牌操作:

>> arr = np.arange(10)
>> arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>> np.random.shuffle(arr)
>> arr
array([8, 9, 0, 7, 4, 2, 1, 6, 5, 3])

这样 arr 中元素本来的顺序就被随机打乱了。

np.random.seed

np.random.seed 用来设置随机的种子,执行随机操作前,调用同一个随机数种子,可以使两次操作保持同一个随机结果。

比如,我们产生高斯分布时,如果不指定随机数的种子,则两次运行的结果是不一致的:

>> np.random.normal(mu, sigma, 10)
array([ 0.52, -0.3 ,  0.34,  0.75,  0.17,  0.27,  1.21,  1.  ,  1.2 ,
        1.99])
>> np.random.normal(mu, sigma, 10)
array([ 1.17, -2.36,  0.65, -1.11,  1.45, -0.88,  1.99,  0.92,  1.9 ,
        1.81])

两次随机操作前,均指定随机种子为 0

>> np.random.seed(0)
>> np.random.normal(mu, sigma, 10)
array([ 1.76,  0.4 ,  0.98,  2.24,  1.87, -0.98,  0.95, -0.15, -0.1 ,
        0.41])
>> np.random.seed(0)
>> np.random.normal(mu, sigma, 10)
array([ 1.76,  0.4 ,  0.98,  2.24,  1.87, -0.98,  0.95, -0.15, -0.1 ,
        0.41])

这个时候,两次随机的结果就是一样的啦~

举报

相关推荐

0 条评论