常用的random函数
函数 | 说明 |
---|---|
uniform | 产生均匀分布中样本值 |
random | 产生[0,1)均匀分布中样本值,random(n)相当于uniform(0,1,size=n) |
seed | 确定随机数生成器的种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的范围 |
shuffle | 将序列随机排列 |
rand | 产生[0,1)之间均匀分布的样本值 |
randint | 从给定的上下限范围内随机选取整数 |
randn | 产生正态分布(平均值为0,标准差为1)的样本值,类似于MATLAB接口 |
binomial | 产生二项分布的样本值 |
normal | 产生正态(高斯)分布的样本值 |
beta | 产生Beta分布的样本值 |
- uniform :产生low到high之间到随机数
a = np.random.uniform(1,10,size=10)
print(a)
'''[3.98463084 8.61185377 5.35385516 7.0035864 8.67462888 9.78658583
9.79967201 6.78037465 3.5029919 4.7547828 ]'''
a = np.random.uniform(1,10,size=(3,3))
print(a)
'''
[[9.43839186 9.07368236 6.21838075]
[3.85047956 1.49500572 5.53782656]
[5.59718833 3.06346308 6.52741635]]
'''
- seed :设置随机数种子
注:seed() 用于指定随机数生成时所用算法开始的数值,如果使用相同的seed()值,则每次会按顺序产生一组固定的数值,如果不设置这个值,系统则根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同
# 随机产生一个数据,此随机数是变动的
print(np.random.random())
print('--分割线0--')
# 设置随机数种子
np.random.seed(1)
# 产生一组顺序的固定的数数据
for _ in range(5):
print(np.random.random())
# 此时,如果再生成一个数据,该数据也是固定的
print('--分割线1--')
print(np.random.random())
# 说明我们设置的种子会一直有效,除非我们再次设置
np.random.seed()
print('--分割线2--')
# 此随机数是变动的
print(np.random.random())
第一次产生的数据
'''
0.7364592271516325
--分割线0--
0.417022004702574
0.7203244934421581
0.00011437481734488664
0.30233257263183977
0.14675589081711304
--分割线1--
0.0923385947687978
--分割线2--
0.7710549043456681'''
第二次产生第数据
'''
0.9432450611067651
--分割线0--
0.417022004702574
0.7203244934421581
0.00011437481734488664
0.30233257263183977
0.14675589081711304
--分割线1--
0.0923385947687978
--分割线2--
0.9760356110578072
'''
- permutation
# permutation(x)
# 如果`x`是一个整数,随机排列np.arange(x)
# 如果`x`是一维数组,则复制并随机排列这些元素
# 如果`x`是多维数据,它只是沿着它的第一个索引随机排列
print(np.random.permutation(9))
'''[7 2 4 1 8 5 6 3 0]'''
a = np.arange(24,step=2)
print(np.random.permutation(a)) # 一维数组
'''[ 6 20 0 12 22 14 8 18 10 4 2 16]'''
a = a.reshape(2,3,2)
print(np.random.permutation(a)) # 多维数组
'''
[[[12 14]
[16 18]
[20 22]]
[[ 0 2]
[ 4 6]
[ 8 10]]]
'''
- shuffle :将序列随机排列
a = np.arange(10)
np.random.shuffle(a)
print(a)
'''[6 9 4 8 3 7 5 2 0 1]'''
- rand :产生均匀分布的样本值
a = np.random.rand(3,2)
print(a)
'''
[[0.01732379 0.54582359]
[0.08311634 0.27877693]
[0.18558311 0.5314748 ]]
'''
- randint :从给定的上下限范围内随机选取整数
a = np.random.randint(1,10,size=10)
print(a)
'''[4 6 1 1 9 7 6 7 9 4]'''
a = np.random.randint(1,10,size=(3,2))
print(a)
'''
[[2 9]
[6 5]
[6 1]]
'''
- randn :产生正态分布(平均值为0,标准差为1)的样本值
a = np.random.randn(5)
print(a)
'''[ 1.78515476 0.95673044 1.02747533 -0.57096934 0.64498262]'''
a = np.random.randn(2,2)
print(a)
'''
[[-0.84610219 1.40651853]
[-1.03676227 -0.27898967]]
'''
a = 10 * np.random.randn(5) + 1
print(a)
'''[-12.14782077 -16.12211203 -12.09324171 4.04459691 10.50003535]'''
- binomial :产生二项分布的样本值
样本是从具有指定参数的二项分布中抽取的,n表示n次试验和p表示成功的概率,其中n> 0且p在区间[0,1]中。 (n可以作为浮点数输入,但它被截断为使用中的整数,p为float或array_like的浮点数)
# 如抛硬币,测试1000次
n,p = 1000,.5 # 试验次数,每次试验的概率
s = np.random.binomial(n, p)
print(s)
'''519'''
- normal :产生正态(高斯)分布的样本值
mu, sigma = 0, 0.1 # 均值和标准差
# 产生1000个样本
s = np.random.normal(mu, sigma, 1000)
# 验证均值和方差
res = abs(mu - s.mean()) < 0.01
print(res)
'''True'''
res = abs(sigma - np.std(s, ddof=1)) < 0.01
print(res)
'''True'''