一、随机数
通过random模块生成随机数
生成的都是伪随机数(依赖于我们给的初始种子)
1、生成随机整数
np.random.randint()
创建指定区间[low, high)的随机整型数组
'''
np.random.randint(low, high=None, size=None, dtype='l')
参数说明:
low:int类型,数据范围下限
high:int类型,数据范围上限
size:数组形状,int或元组类型
函数作用:
返回指定区间[low, high)的整型数组
'''
np.random.randint(10,20,10)
# array([16, 10, 15, 16, 10, 13, 14, 15, 10, 17])
np.random.randint(10,20,(2,4))
# array([[17, 19, 13, 11],
# [19, 17, 16, 13]])
2、固定随机种子
np.random.seed()
固定生成的随机数(下一次按照相同的seed,产生的随机数组永远与第一次一样)
'''
np.random.seed(seed=None)
函数作用:
随机种子生成器,固定生成的随机数
如果使用相同的seed( )值,则每次生成的随即数都相同;
如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
'''
# 指定seed = 1
np.random.seed(1)
np.random.randint(10,20,(2,4))
# 产生随机数组1
# array([[15, 18, 19, 15],
# [10, 10, 11, 17]])
# 此时不指定seed,再次执行相同的随机语句
np.random.randint(10,20,(2,4))
# 产生随机数组2,与随机数组1不相同
# array([[17, 16, 19, 12],
# [14, 15, 12, 14]])
# 当我再次指定seed = 1,并再次执行相同的随机语句
np.random.seed(1)
np.random.randint(10,20,(2,4))
# 产生随机数组与第一次一样,因为随机种子被固定了
# array([[15, 18, 19, 15],
# [10, 10, 11, 17]])
3、生成随机浮点数
np.random.random()
创建[0.0, 1.0)的随机浮点型数据
'''
np.random.random(size=None)
参数说明:
size:数组形状,int或元组类型
函数作用:
返回一个区间在[0.0, 1.0)的浮点型数字或者数组
'''
# 不指定size(形状),产生一个随机浮点数
a = np.random.random()
a
# 0.878511261301476
# 指定随机数组形状(3,2)
a = np.random.random((3,2))
a
输出:
array([[0.23399606, 0.12850243],
[0.05665077, 0.77764984],
[0.7456458 , 0.36705173]])
np.random.rand()
创建区间在[0.0, 1.0)的均匀分布的随机浮点数数组
'''
rand(d0, d1, ..., dn)
参数说明
d0, d1, ..., dn:数组的形状
函数说明:
生成区间在[0.0, 1.0)的均匀分布的浮点型数字或者数组
'''
# 默认生成一个浮点型数字
np.random.rand()
# 0.34556072704304774
# 指定随机数组生成的形状
np.random.rand(2,1,3)
# array([[[0.41919451, 0.6852195 , 0.20445225]],
# [[0.87811744, 0.02738759, 0.67046751]]])
np.random.uniform()
创建指定范围内均匀分布的随机浮点数数组
'''
np.random.uniform(low=, high=, size=None)
参数说明
low:区间下限
high:区间上限
[low, high)
size:数组形状
函数说明:
生成指定区间内的随机浮点数型数组
'''
np.random.uniform(2,30,(2,4))
# array([[13.68453447, 17.6433152 , 5.93083428, 7.54684169],
# [24.42084792, 29.11132412, 10.77587699, 21.38503324]])
np.random.randn()
产生标准正态分布的随机数组
'''
np.random.randn(d0, d1, ..., dn)
若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。
其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。
当μ = 0,σ = 1时的正态分布是标准正态分布。
μ:均值 = 0
σ:标准差 = 1
函数作用:
产生标准正态分布的随机数。
'''
d = np.random.randn(2,3)
d
# array([[ 0.40890054, -0.02461696, -0.77516162],
# [ 1.27375593, 1.96710175, -1.85798186]])
# 随机数组的均值
d.mean()
# 接近0
# 0.1653329629764415
# 随机数组的标准差
d.std()
# 接近1
# 1.2615276003417357
np.random.normal()
产生正态分布的随机数组
'''
np.random.normal(loc=0.0, scale=1.0, size=None)
参数说明:
loc:均值 = 0
scale:标准差 = 1
size:数组的形状
不填参数,默认生成标准正态分布的随机数组
函数作用:
产生正态分布的随机数组。
'''
d = np.random.normal(1,3,(3,3))
d
# array([[-0.87059219, 2.56172901, -2.43302417],
# [ 3.4055831 , 1.1397019 , 0.44029068],
# [ 0.69476238, 3.60665847, 3.25123492]])
# 随机数组的均值
d.mean()
# 接近1
# 1.3107049001667699
# 随机数组的标准差
d.std()
# 接近3
# 1.9700662140538878
4、随机排序
np.random.shuffle()
直接作用于原数组
'''
np.random.shuffle(x)
参数说明:
x:要进行随机排序的数组
注意:直接作用于原数组
'''
d
# array([[ 2.59, 1.41, 1.23],
# [ 2.86, 1.7 , 3.05],
# [ 0.07, -6.3 , 4.12]])
# 无返回值
np.random.shuffle(d)
d
# array([[ 2.59, 1.41, 1.23],
# [ 0.07, -6.3 , 4.12],
# [ 2.86, 1.7 , 3.05]])
np.random.permutation()
不直接作用于原数组
'''
np.random.permutation(x)
参数说明:
x:要进行随机排序的数组
注意:
If `x` is a multi-dimensional array, it is only shuffled along its
first index.
如果x是多维数组,只会随机第一维的元素
'''
x = np.arange(12).reshape(3,4)
x
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]])
# 随机多维数组
np.random.permutation(x)
'''
x的形状为(3, 4),是一个二维数组,只会对第一维度的三个元素的顺序进行随机排序
'''
# array([[ 8, 9, 10, 11],
# [ 4, 5, 6, 7],
# [ 0, 1, 2, 3]])
扩展:
np.set_printoptions()
控制生成数组的小数位精度
'''
np.set_printoptions(precision=None,)(
参数说明:
precision:控制生成数组的小数位精度
'''
# 设置生成的数组元素保留两位小数
np.set_printoptions(precision = 2)
# 创建符合正态分布的随机数组
d = np.random.normal(1,3,(3,3))
d
# array([[ 2.59, 1.41, 1.23],
# [ 2.86, 1.7 , 3.05],
# [ 0.07, -6.3 , 4.12]])