当我们指定数组时,希望数组中的值是随机值时,就需要用到 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])
这个时候,两次随机的结果就是一样的啦~