设置随机数种子:
np.random.seed(seed=None)
指定种子后,每次生成的随机数相同。否则系统根据时间设置种子,每次随机数因时间不同而不同。
离散型
以下函数中,n为样本空间,p为一次实验成功的概率,size为实验次数
二项分布
返回一维数组
np.random.binomial(n, p, size=None)
或导入scipy包
from scipy import stats
stats.binom.rvs(n, p, size=size)
求概率?
求均值与方差,moments参数中 m为期望,v为方差
stats.binom.stats(n, p, loc=0, moments='mv')
泊松分布
返回一维数组
np.random.poisson(lam=1.0, size=None)
或导入scipy包
from scipy import stats
stats.poisson.rvs(lam,size=size)
求概率
stats.poisson.pmf(k, mu)
求均值、方差?
超几何分布
返回一维数组
numpy.random.hypergeometric(ngood, nbad, nsample, size=None)
或导入scipy包
from scipy import stats
stats.hypergeom.rvs(M, n, N, loc=0, size=1, random_state=None)
计算k次实验成功的概率
stats.hypergeom.pmf(k, M, n, N, loc)
均值与方差:
stats.hypergeom.stats(M, n, N, loc=0, moments='mv')
连续型
f(x)为概率密度
均匀分布
np.random.uniform(low=0.0, high=1.0, size=None)
分布包含low,不包含high,即范围为:[low, high)
[0, 1)之间的均匀分布的小数:(d0,d1,…,dn代表数据维度)
np.random.rand(d0, d1, ..., dn)
[low, high)之间的均匀分布的整数:(若high为默认值None,则范围为[0, low))
np.random.randint(low, high=None, size=None, dtype='l')
正态分布
f(x) = 1 / (2 PI)1/2 * exp(-x2 / 2)
标准正态分布:(均值0,标准差1)
np.random.randn(d0, d1, ..., dn)
f(x) = 1 / ((2PI)1/2 sigma) * exp(-(x-mu)2 / (2 mu2)
指定参数:(loc:mu均值,scale:sigma标准差)
np.random.normal(loc=0.0, scale=1.0, size=None)
与sigma * np.random.randn(...) + mu等价
指数分布
f(x) = lambda * exp(-lambda * x), x > 0
f(x) = 0, x <= 0
注:scale = 1 / lambda
np.random.exponential(scale=1.0, size=None)
其他随机函数
随机从序列抽取元素
np.random.choice(a, size=None, replace=True, p=None)
若a为整数,则从np.range(a)中随机抽取;若a为数组,取值从a数组元素中随机抽取。replace控制是否抽取重复元素,p(array类型)控制不同元素被选取的概率。
打乱数据集
np.random.shuffle(x)
对x重排序,若x为多维数组,只沿0轴打乱。无返回值,改变原数组。
np.random.permutation(x)
与上函数作用相同,有返回值,不改变原数组。
代码运行结果很有意思,一块一块运行即可:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(926734542)
bino = np.random.binomial(10, 0.1, 20)
print(bino)
plt.hist(bino)
plt.show()
pois = np.random.poisson(3, 10000)
print(pois)
plt.hist(pois)
plt.show()
hype = np.random.hypergeometric(10, 90, 50, 10000)
print(hype)
plt.hist(hype)
plt.show()
unif = np.random.uniform(-30, 30, 10000)
print(unif)
plt.hist(unif)
plt.show()
bzzt = np.random.randn(10000)
print(bzzt)
plt.hist(bzzt)
plt.show()
norm = np.random.normal(0, 1, 10000)
print(norm)
plt.hist(norm)
plt.show()
expo = np.random.exponential(scale=1.0, size=10000)
print(expo)
plt.hist(expo)
plt.show()
a = np.random.randn(100000)
choc = np.random.choice(a, size=10000, replace=True, p=None)
print(choc)
plt.hist(choc)
plt.show()
x = np.arange(100)
print(x)
y = np.random.permutation(x)
print(y)
np.random.shuffle(x)
print(x)