numpy 太强大了,它的随机数模块也比python原生的random模块要好用的多,提供的功能更加丰富,更加强大。
rand 函数产生[0, 1)范围内的随机数,能产生多少个,取决于传入的参数,rand的定义如下
def rand(*dn):
"""
rand(d0, d1, ..., dn)
"""
pass
dn是可变参数,可以传入多个,表示生成数组的形状,如果不传入任何参数则返回一个float类型的数值
import numpy as np
value = np.random.rand()
print(value, type(value))
现在实验一下传入参数的情况
import numpy as np
array_1 = np.random.rand(6) # 一维数组随机数
print(array_1)
array_2 = np.random.rand(3, 2) # 二维数组随机数
print(array_2)
程序输出
[0.94762455 0.6558327 0.47573493 0.11224826 0.82755192 0.38966902]
[[0.64692518 0.89247648]
[0.39437826 0.07003423]
[0.47875777 0.45057145]]
randn可以从标准正态分布中返回一个或多个样本值,这些随机数,服从均值为0,方差为1的分布,除了随机值的范围不同,其使用方法与rand基本一致
import numpy as np
value = np.random.randn()
print(value) # 生成一个随机数
array_1 = np.random.randn(90)
print(array_1.mean()) # 均值
print(array_1.var()) # 方差
array_2 = np.random.randn(10, 9)
print(array_2.mean()) # 均值
print(array_2.var()) # 方差
输出结果
-0.7161199885791742
-0.2421447905554953
0.8668068040071367
-0.027454863417423495
0.706106831464308
从输出结果来看,均值趋近于0,方差趋近于1,多试验几次,效果会更明显。如果想生成指定均值和方差的正态分布,则可以依照下面的公式
sigma * np.random.randn(...) + mu
sigma是标准差,mu是均值,sigma的平方就是方差,现在我想要生成一组随机数,均值是2,方法是9,就可以这样来做
import numpy as np
array = 3*np.random.randn(100) + 2
print(array.mean()) # 均值
print(array.var()) # 方差
random的作用也是生成一个[0, 1)范围内的随机数,下面是这个函数的使用示例
import numpy as np
value = np.random.random()
print(value) # 产生一个随机数
array_1 = np.random.random(8) # 一维数组
print(array_1)
array_2 = np.random.random((3, 4)) # 二维数组
print(array_2)
使用方法几乎与rand相同,唯一的区别是想要生成二维或更高维度的数组时,rand函数需要传入多个参数,而random只需要传入一个元组即可,但仅仅是参数的区别么?目前看是如此的,如果你有别的见解,欢迎与我交流。
生成指定范围内的随机整数,函数定义如下
def randint(low, high=None, size=None, dtype=None):
pass
我现在要生成一个在[0, 4)范围内的整数
import numpy as np
value = np.random.randint(4)
print(value)
接下来生成8个范围在[3, 9)之间的随机整数
import numpy as np
value = np.random.randint(3, 9, size=8)
print(value) # [4 6 4 8 8 8 3 3]
uniform 从指定范围内产生均匀分布的随机浮点数,函数定义如下
def uniform(low=0.0, high=1.0, size=None):
pass
举例说明
import numpy as np
value = np.random.uniform(1.4, 2.8) # 生成一个在[1.4, 2.8) 范围内的随机数
print(value)
array_1 = np.random.uniform(0.5, 3.5, 9) # 生成9个在[0.5, 3.5) 之间的随机数
print(array_1)
print(array_1.mean()) # 一定接近于2
array_2 = np.random.uniform(0.5, 3.5, (3, 4)) # 生成一个维度是(3, 4) 的数组,元素在[0.5, 3.5)范围内随机
print(array_2)
array_1 的元素随机值在[0.5, 3.5)之间,uniform产生的随机值是均匀分布的,因此array_1的平均值一定接近于2
QQ交流群: 211426309