Python 中可以使用 numpy.random
产生随机数,这里记录了相关的使用方法: 1 2 import numpy as np from __future__ import division
# 设定
seed 1 np.random.seed(seed=None)
返回 [0,1)
范围内的指定维度的数组(均匀分布)
1 2 3 4 5 6 7 8 np.random.rand(d0,d1,…,dn) >>> np.random.rand(2) array([0.30304177, 0.0649002 ]) >>> np.random.rand(2,2) array([[0.08084478, 0.60007844], [0.32630895, 0.64528464]])
返回指定维度的具有标准正态分布的数组
1 2 3 4 5 6 7 np.random.randn(d0,d1,…,dn) a=np.random.rand(200000) b=np.random.randn(200000) a1=(a-a.mean())/(a.max()-a.min()) plt.hist(a1,bins=1000,density=True,color='g') plt.hist(b, bins=1000,density=True,color='r')
返回
[low,high) 范围内的指定维度的整数
数组,当 high
值未指定时,范围为 [0,low)
1 2 3 4 np.random.randint(low, high=None, size=None, dtype='l') np.random.randint(0,3,size=2) np.random.randint(0,3,size=(2,2))
返回 [0,1)
范围内指定维度的数组
1 2 3 4 5 np.random.rand(d0,d1,…,dn) np.random.random_sample(size=None) np.random.random(size=None) np.random.ranf(size=None) np.random.sample(size=None)
以一维数组
a 作为整体生成样本,replace 表示取样后是否放回,p 为一维数组,表示 a
中每一个元素对应的概率(权重)
1 2 3 4 5 6 7 np.random.choice(a, size=None, replace=True, p=None) np.random.choice(np.arange(5),1) np.random.choice(['a','b','c'],2) a=np.random.choice(np.arange(5),20000,p=[0.3,0.1,0.3,0.1,0.2]) plt.hist(a, bins=5,density=True,color='r')
从特定的分布中提取样本
1 2 numpy.random.uniform(low=0.0, high=1.0, size=None) # 从均匀分布 [low, high) 中生成样本 numpy.random.binomial(n, p, size=None) # 从二项分布中生成样本
其它更多的分布,可在手册 中查询
例子(计算圆周率)
在边长为 2R 的正方形内随机放置点,点距正方形中心的距离小于 R
的概率为 pi/4,故可计算出圆周率。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import numpy as np from __future__ import division r=1 n=200000 # repeat number p=2*np.random.random(size=(n,2))-1 # position d=[np.sqrt(np.sum((p[i]-[0,0])**2)) for i in range(n)] d=np.array(d) print('Calculated Pi: %.9f'%(np.sum(d<1)/n*4)) x=[np.cos(i*2*np.pi/n) for i in range(n)] y=[np.sin(i*2*np.pi/n) for i in range(n)] plt.figure(figsize=(3,3)) plt.axis((-1,1,-1,1)) plt.scatter(p[:,0],p[:,1],s=0.09) plt.scatter(x,y,s=0.09)