数据分析学习笔记(五)-- numpy:随机数

常用的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'''                                              

更多random使用,请参考Scipy指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值