使用Python进行数据处理时,往往需要用到大量的随机数据,那如何构造这么多数据呢?Python的第三方库numpy库中提供了random函数来实现这个功能。
首先导入numpy,下面所有的代码都默认导入了 numpy,即下面的代码:
import numpy as np
首先说下numpy.random.seed()与numpy.random.RandomState()这两个在数据处理中比较常用的函数,两者实现的作用是一样的,都是使每次随机生成数一样
np.random.seed(1)
np.random.rand(8)
result:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
np.random.seed(1)
np.random.rand(8)
result:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
再看numpy.random.RandomState():
rng=np.random.RandomState(1)
rng.rand(8)
result:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
rng=np.random.RandomState(1)
rng.rand(8)
result:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
可以看到上述四个随机数结果是 一样的
1、numpy.random.rand()
官方文档中给出的用法是: np.random.rand(d0,d1,d2.....dn)
以给定的形状创建一个数组,并在数组中加入在[0,1]之间均匀分布的随机数样本
用法及实现
np.random.rand(2,3)
result:
array([[0.87638915, 0.89460666, 0.08504421],[0.03905478, 0.16983042, 0.8781425 ]])
2、numpy.random.randn()
官方文档中给出的用法是:numpy.random.randn(d0,d1,…dn)
以给定的形状创建一个数组,数组元素符合标准正态分布 N(0,1)
若要得到一般的正态分布 N(mu,sigma*sigma),则可以用 sigma*np.random.randn(....)+mu 进行表示
用法及实现
np.random.randn(2,3)
result:
array([[-0.17242821, -0.87785842, 0.04221375],[ 0.58281521, -1.10061918, 1.14472371]])
3、numpy.random.randint()
官方文档中给出的用用法是: np.random.randint(low,high=None,size=None,dtype)
生成在半开闭区间[low,high)上离散均匀分布的整数值;若 high=None,则取值区间变为[0,low)
用法及实现
# high = None
np.random.randint(5,size=(2,3))
result:
array([[4, 2, 4],[0, 3, 1]])
# high != None
np.random.randint(2,high=5,size=(2,3))
result:
array([[4, 2, 2],[3, 4, 4]])
np.random.randint(0,15) # 这里未指定 size,只生成一个
result:
6
4、numpy.random.random_integers()
#官方文档中给出的用法是:numpy.random.random_integers(low,high=None,size=None)
#生成闭区间[low,high]上离散均匀分布的整数值;若high=None,则取值区间变为[1,low]
#用法及实现
# high = None
np.random.random_integers(5,size=(2,3))
result:
/home/zp/ProgramData/Anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) insteadarray([[2, 4, 5],[4, 2, 4]])
上述的结果中有一段废弃警告,大致意思是:Python3.6将不再使用 random.random_integers(),可以使用 randint() 代替
np.random.randint(1,5+1,size=(2,3))
result:
array([[1, 3, 3],[2, 4, 5]])
# high != None
np.random.random_integers(2,high=5,size=(2,3))
result:
/home/zp/ProgramData/Anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(2, 5 + 1) instead"""Entry point for launching an IPython kernel.array([[4, 4, 4],[2, 2, 5]])
np.random.randint(2,6,size=(2,3))
result:
array([[5, 3, 3],[3, 5, 2]])
5、numpy.random.random_sample()
官方文档中给出的用法是:numpy.random.random_sample(size=None)
以给定形状返回[0,1)之间的随机浮点数
用法及实现
np.random.random_sample(size=(2,3))
result:
array([[0.53589641, 0.66379465, 0.51488911],[0.94459476, 0.58655504, 0.90340192]])
np.random.random_sample()
result:
0.13747470414623753
其他函数,numpy.random.random() ;numpy.random.ranf() numpy.random.sample()用法及实现都与它相同
6、numpy.random.choice()
官方文档中给出的用法: np.random.choice(a,size=None,replace=True,p=None)
若 a 为数组,则从 a 中选取元素;若 a 为单个 int 类型数,则选取 range(a) 中的数
replace 是bool 类型,为 True,则选取的元素会出现重复,反之不会出现重复
p 为数组,里面存放选到每个数的可能性,即 概率
np.random.choice(5,size=4,replace=True,p=[0.1,0.1,0.3,0.4,0.1])
result:
array([2, 4, 3, 3])
np.random.choice(5,size=4,replace=False,p=[0.1,0.1,0.3,0.4,0.1])
result:
array([1, 4, 2, 3])