python里随机数生成主要有两种方式,一种是random库,另一种是numpy.random。我目前后一种用的比较多,因此就先介绍后一种中一些(我)可能常用的,第一种等有时间了再整理。
1. 用numpy.random生成随机数
1.1 生成服从均匀分布的随机数
1.2 生成服从正态分布的随机数
1.3 生成服从指数分布的随机数
1.4 生成服从二项分布的随机数
1.5 从指定一维数据集中随机选择数据:(可用于bootstrap抽样)
1.6 将数据打乱(可用于Permutation Test)
1. 用numpy.random生成随机数
1.1 生成服从均匀分布的随机数:
语法:np.random.uniform(low, high, size)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#通过low=0, high=1, size=10000,我们可以得到10000个0-1之间的随机数
data1 = np.random.uniform(low=0, high=1, size=10000)
#density设为true是将频数转化为频率
plt.hist(data1, bins=100, density=True)
plt.show()
1.2 生成服从正态分布的随机数:
语法:np.random.normal(loc, scale, size)
说明:其中scale为标准差
#得到10000个服从均值为2,方差为1的正态分布的随机数
data2 = np.random.normal(2, 1, 10000)
plt.hist(data2, bins=100, density=True)
plt.show()
1.3 生成服从指数分布的随机数
语法:np.random.exponential(scale, size)
说明:scale即为 f ( x ) = e − λ f(x)=e^{-\lambda} f(x)=e−λ中的 λ \lambda λ
data_e = np.random.exponential(1, 10000)
plt.hist(data_e, bins=100, density=True)
plt.show()
1.4 生成服从二项分布的随机数
语法:np.random.binomial(n, p, size)
说明:参数n表示一次实验的样本数,p为每个样本发生的概率
#比如说,抛size=10次硬币,正面朝上的概率为p=0.5
data3 = np.random.binomial(1, p=0.5, size=10)
print(data3)
输出:[0 1 0 1 1 1 0 0 0 1]
1.5 从指定一维数据集中随机选择数据:(可用于bootstrap抽样)
语法:np.random.choice(a, size=None, replace=True, p=None)
说明:replace默认为True,意思是可以重复选择数据,即有放回抽样
data4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#从data4中有放回抽5次
data5 = np.random.choice(data4, size=5)
print(data5)
输出:[ 5 10 3 9 2]
1.6 将数据打乱(可用于Permutation Test)
语法:np.random.shuffle()或np.random.permutation()
说明:shuffle是直接在原数据上打乱,permutation则是不打乱原数据,而是返回一个打乱后的数据,为numpy.ndarray对象。
import numpy as np
data1 = [1, 2, 3, 4, 5]
#先用np.random.shuffle()
data2 = np.random.shuffle(data1)
print(data1) #结果为[1, 2, 5, 4, 3],可见将原数据打乱了
print(data2) #返回None,因为np.random.shuffle()不返回
data3 = [1, 2, 3, 4, 5]
#接下来用np.random.shuffle()
data4 = np.random.permutation(data1)
print(data3) #结果为[1, 2, 3, 4, 5],原数据并没有乱
print(data4) #返回[5 3 1 2 4],为numpy.ndarray对象