numpy.random模块里有各种随机数生成函数,介绍几个常用的:
randint(low, high=None, size=None, dtype='l')
low
high
取值范围,包括下限数值但不包括上限数值,若只有一个参数,表示取值范围上限
size
生成随机数的数量或shape,缺省时只返回单个随机数
In [10]: np.random.randint(5,size=10) # 只有一个范围参数,表示取值上限
Out[10]: array([3, 2, 4, 1, 3, 3, 0, 2, 0, 3])
In [11]: np.random.randint(5,10,size=10) # 两个范围参数,表示取值范围
Out[11]: array([5, 5, 7, 7, 9, 8, 5, 8, 9, 9])
In [14]: np.random.randint(5,10,(3,4)) # size为元组,表示生成矩阵的shape
Out[14]:
array([[7, 5, 9, 9],
[7, 5, 7, 8],
[8, 6, 7, 9]])
rand(d0, d1, ..., dn)
randn(d0, d1, ..., dn)
参数为生成的shape
In [21]: np.random.rand(5,5) # 5*5的矩阵
Out[21]:
array([[0.57890371, 0.74825882, 0.77334475, 0.28432743, 0.63165005],
[0.08240677, 0.38646131, 0.52298527, 0.37325049, 0.28064731],
[0.56370019, 0.04327205, 0.93787321, 0.14260971, 0.64227087],
[0.87509277, 0.10756811, 0.71438217, 0.68758854, 0.80131041],
[0.63364383, 0.04344815, 0.11854164, 0.74121914, 0.76884027]]
对于一维数组随机打乱数据顺序,对于多维数组随机打乱0轴的顺序
shuffle(x)
直接修改对象,不返回值
permutation()
不修改对象,返回一个修改后的新对象
In [38]: data=np.arange(10).reshape(5, 2) # 原对象不修改
In [39]: data
Out[39]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
In [40]: np.random.permutation(data) # 返回修改后的内容
Out[40]:
array([[2, 3],
[4, 5],
[0, 1],
[6, 7],
[8, 9]])
In [41]: data # 原对象不修改
Out[41]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
In [42]: np.random.shuffle(data) # 无返回值
In [43]: data # 原对象被修改
Out[43]:
array([[2, 3],
[0, 1],
[8, 9],
[4, 5],
[6, 7]])
从一维数组里随机抽取数据并组成新的数组
choice(a, size=None, replace=True, p=None)
a
若是一维数组则从该数组中抽取数据;若是一个整数,则相当于从np.arange(a)生成的一维数组中抽取数据
size
新数组的大小或shape
replace
是否允许重复,默认True
p
抽取概率,shape必须和a相同,每个数字代表a里相同位置数据被抽取的概率,所有概率值相加必须等于1
In [57]: data=np.arange(10)
In [58]: data
Out[58]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [59]: np.random.choice(data,(3,3)) # 从一维数组抽取
Out[59]:
array([[8, 9, 8],
[4, 8, 7],
[5, 9, 5]])
In [60]: np.random.choice(10,(3,3)) # 第一个参数10表示np.arange(10)生成的数组
Out[60]:
array([[9, 4, 7],
[1, 8, 0],
[5, 6, 6]])
In [61]: np.random.choice(data,(3,3),replace=False) # 不允许重复
Out[61]:
array([[4, 6, 8],
[1, 5, 0],
[3, 7, 2]])
In [62]: np.random.choice(3,10,p=[0.3,0.2,0.5]) # 概率p数组shape必须和a参数相同,概率相加必须等于1
Out[62]: array([0, 1, 2, 2, 2, 0, 2, 2, 2, 1], dtype=int64)