(13)numpy基础5:random模块 伪随机数生成及使用

1.numpy.random 模块 

1.1 函数详解

seed 向随机数生成器传递随机状态种子

permutation 返回一个序列的随机排序,或者返回一个乱序的整数范围序列

shuffle 随机排序一个序列

rand 从均匀分布中抽取样本

randint 据给定的范围抽取随机整数

randn 从均值0方差1的正态分布中抽取样本(MATLAB型接口)

binomial 从二项分布中抽取样本

normal 从正态(高斯)分布中抽取样本

beta 从bata分布中抽取样本

chisquare 从卡方分布中抽取样本

gamma 从伽马分布中抽取样本

uniform 从均匀[0,1)分布中抽取样本

 normal 可获得 正态分布样本数组

1.2 举例运用

import numpy as np
samples = np.random.normal(size=(4, 4)) #4x4正态分布数组
samples
#比较np.random和纯python的方式的时间
from random import normalvariate
N = 1000000
%timeit samples = [normalvariate(0, 1) for _ in range(N)]
%timeit np.random.normal(size=N) #快一个数量级,生成伪随机数
np.random.seed(1234) #获取随机数种子
rng = np.random.RandomState(1234) #创建了一个随机数生成器,使数据独立于其他的随机数状态
rng.randn(10)

import random
nwalks = 8
nsteps = 3
steps = np.random.normal(loc=0, scale=0.25,size=(nwalks, nsteps))#正态分布

 2 实例应用

2.1 随机漫步

import random
import matplotlib.pyplot as plt
position = 0
walk = [position] #定义一个数组
steps = 1000
for i in range(steps):
    step = 1 if random.randint(0, 1) else -1 #从0或1中随机获取值,为1时返回1,反之返回-1
    position += step
    walk.append(position)
plt.figure()
plt.plot(walk[:100]) #显示数组的前100个

 2.2 掷硬币版本随机漫步

import random
nsteps = 100
draws = np.random.randint(0, 2, size=nsteps)#取0或1,指定100次
steps = np.where(draws > 0, 1, -1) #满足大于0 则返回1,反之为-1
walk = steps.cumsum() #累计数组的值
walk.min()
walk.max()
(np.abs(walk) >= 6).argmax() #判断往同一方向走了6步的位置
#argmax:返回的第一个 满足 前面条件(walk的绝对值大于6)的位置,效率不高,扫描整个数组

 3 一次性模拟多次随机漫步

import random
nwalks = 5000 #行数
nsteps = 1000 #列数
draws = np.random.randint(0, 2, size=(nwalks, nsteps)) # 据给定行列返回0或1的多维数组
steps = np.where(draws > 0, 1, -1) #过滤数据
walks = steps.cumsum(1)
walks
hits30 = (np.abs(walks) >= 30).any(1) #返回 每行数组中含有满足绝对值大于30的值为true,反之为false的布尔一维数组
hits30
hits30.sum() # 判断布尔一维数组中有多少个ture,即每行中含有绝对值大于30的行数
crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1) #记录每行(含有绝对值大于30的行)中绝对值大于30的值的位置
crossing_times.mean() #获取绝对值大于30的位置的均值

 小数据量的数据样例:便于理解

本篇知识点参考《利用python进行数据分析》,更多知识请阅读原书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值