我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Numpy随机抽样如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Numpy随机抽样如何实现

这篇文章主要介绍了Numpy随机抽样如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Numpy随机抽样如何实现文章都会有所收获,下面我们一起来看看吧。

    前言

    numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数,如正态分布、泊松分布等。

    一、随机模块

    numpy.random.seed(seed=None)

    seed()用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
    在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机的差异对结果产生影响。

    二、离散型随机变量

    二项分布

    二项分布可以用于只有一次实验只有两种结果,各结果对应的概率相等的多次实验的概率问题。比如处理猜10次拳赢6次的概率等类似的问题。

    二项分布概率函数的代码表示:binom.pmf(k) = choose(n, k) pk (1-p)(n-k)

    二项分布概率函数的数学表示:

    numpy.random.binomial(n, p, size=None)表示对一个二项分布进行采样,size表示采样的次数,n表示做了n重伯努利试验,p表示成功的概率,函数的返回值表示n中成功的次数

    【例】野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?

    import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsnp.random.seed(20200605)n = 9# 做某件事情的次数p = 0.1# 做某件事情成功的概率size = 50000x = np.random.binomial(n, p, size)'''或者使用binom.rvs#使用binom.rvs(n, p, size=1)函数模拟一个二项随机变量,可视化地表现概率y = stats.binom.rvs(n, p, size=size)#返回一个numpy.ndarray'''print(np.sum(x == 0) / size)  # 0.3897plt.hist(x)plt.xlabel('随机变量:成功次数')plt.ylabel('样本中出现的次数')plt.show()#它返回一个列表,列表中每个元素表示随机变量中对应值的概率s = stats.binom.pmf(range(10), n, p)print(np.around(s, 3))# [0.387 0.387 0.172 0.045 0.007 0.001 0.    0.    0.    0.   ]

    【例】模拟投硬币,投2次,请问两次都为正面的概率?

    import numpy as npfrom scipy import statsimport matplotlib.pyplot as pltnp.random.seed(20200605)n = 2# 做某件事情的次数,这里是投两次硬币p = 0.5#做某件事情成功的概率,在这里即投硬币为正面的概率size = 50000x = np.random.binomial(n, p, size)'''或者使用binom.rvs#使用binom.rvs(n, p, size=1)函数模拟一个二项随机变量,可视化地表现概率y = stats.binom.rvs(n, p, size=size)#返回一个numpy.ndarray'''print(np.sum(x == 0) / size)  # 0.25154print(np.sum(x == 1) / size)  # 0.49874print(np.sum(x == 2) / size)  # 0.24972plt.hist(x, density=True)plt.xlabel('随机变量:硬币为正面次数')plt.ylabel('50000个样本中出现的次数')plt.show()#它返回一个列表,列表中每个元素表示随机变量中对应值的概率s = stats.binom.pmf(range(n + 1), n, p)print(np.around(s, 3))# [0.25 0.5  0.25]

    计算期望和方差

    期望:E(x) = np
    方差:Var(x) = np(1-p)
    利用stats.binom.stats(n, p, loc=0, moments='mv')计算期望和方差
    moments参数中:m为期望,v为方差

    泊松分布

    泊松分布主要用于估计某个时间段某事件发生的概率。

    泊松概率函数的代码表示:poisson.pmf(k) = exp(-lam) lam*k / k!

    泊松概率函数的数学表示:

    numpy.random.poisson(lam=1.0, size=None)表示对一个泊松分布进行采样,size表示采样的次数,lam表示一个单位内发生事件的平均值,函数的返回值表示一个单位内事件发生的次数。
    【例】假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概率是多少?

    import numpy as npfrom scipy import statsimport matplotlib.pyplot as pltnp.random.seed(20200605)lam = 42 / 6# 平均值:平均每十分钟接到42/6次订票电话size = 50000x = np.random.poisson(lam, size)'''或者#模拟服从泊松分布的50000个随机变量x = stats.poisson.rvs(lam,size=size)'''print(np.sum(x == 6) / size)  # 0.14988plt.hist(x)plt.xlabel('随机变量:每十分钟接到订票电话的次数')plt.ylabel('50000个样本中出现的次数')plt.show()#用poisson.pmf(k, mu)求对应分布的概率:概率质量函数 (PMF)x = stats.poisson.pmf(6, lam)print(x)  # 0.14900277967433773

    超几何分布

    在超几何分布中,各次实验不是独立的,各次实验成功的概率也不等。 超几何分布概率函数的数学表示:

    numpy.random.hypergeometric(ngood, nbad, nsample, size=None)表示对一个超几何分布进行采样,size表示采样的次数,ngood表示总体中具有成功标志的元素个数,nbad表示总体中不具有成功标志的元素个数,ngood+nbad表示总体样本容量,nsample表示抽取元素的次数(小于或等于总体样本容量),函数的返回值表示抽取nsample个元素中具有成功标识的元素个数。

    【例】一共20只动物里有7只是狗,抽取12只有3只狗的概率(无放回抽样)。

    import numpy as npfrom scipy import statsimport matplotlib.pyplot as pltnp.random.seed(20200605)size = 500000x = np.random.hypergeometric(ngood=7, nbad=13, nsample=12, size=size)'''或者#用rvs(M, n, N, loc=0, size=1, random_state=None)模拟x = stats.hypergeom.rvs(M=20,n=7,N=12,size=size)'''print(np.sum(x == 3) / size)  # 0.198664plt.hist(x, bins=8)plt.xlabel('狗的数量')plt.ylabel('50000个样本中出现的次数')plt.title('超几何分布',fontsize=20)plt.show()"""M 为总体容量n 为总体中具有成功标志的元素的个数N,k 表示抽取N个元素有k个是成功元素"""x = range(8)#用hypergeom.pmf(k, M, n, N, loc)来计算k次成功的概率s = stats.hypergeom.pmf(k=x, M=20, n=7, N=12)print(np.round(s, 3))# [0.    0.004 0.048 0.199 0.358 0.286 0.095 0.01 ]

    超几何分布的均值与方差

    均值E(x) = N(n/M)
    方差Var(x) = N(n/M)(1-n/M)((M-N)/(M-1))
    注释:考虑n次实验的超几何分布,令p=n/M,当总体容量足够大时((M-N)/(M-1))近似于1,此时数学期望为Np,方差为Np(1-p).
    #用stats(M, n, N, loc=0, moments='mv')计算均值和方差
    stats.hypergeom.stats(20,7,12,moments='mv')

    三、连续型随机变量

    均匀分布

    • numpy.random.uniform(low=0.0, high=1.0, size=None)

    • Samples are uniformly distributed over the half-open interval [low, high) (includes low, but excludes high). In other words, any value within the given interval is equally likely to be drawn by uniform.

    【例】在low到high范围内,创建大小为size的均匀分布的随机数。

    import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsnp.random.seed(20200614)a = 0b = 100size = 50000x = np.random.uniform(a, b, size=size)print(np.all(x >= 0))  # Trueprint(np.all(x < 100))  # Truey = (np.sum(x < 50) - np.sum(x < 10)) / sizeprint(y)  # 0.40144plt.hist(x, bins=20)plt.show()a = stats.uniform.cdf(10, 0, 100)b = stats.uniform.cdf(50, 0, 100)print(b - a)  # 0.4

    作为uniform()的特列,可以得到[0,1)之间的均匀分布的随机数。

    • numpy.random.rand(d0, d1, ..., dn)Random values in a given shape.

    【例】根据指定大小产生[0,1)之间均匀分布的随机数。

    import numpy as npnp.random.seed(20200614)print(np.random.rand())# 0.7594819171852776print(np.random.rand(5))# [0.75165827 0.16552651 0.0538581  0.46671446 0.89076925]print(np.random.rand(4, 3))# [[0.10073292 0.14624784 0.40273923]#  [0.21844459 0.22226682 0.37246217]#  [0.50334257 0.01714939 0.47780388]#  [0.08755349 0.86500477 0.70566398]]np.random.seed(20200614)print(np.random.uniform())  # 0.7594819171852776print(np.random.uniform(size=5))# [0.75165827 0.16552651 0.0538581  0.46671446 0.89076925]print(np.random.uniform(size=(4, 3)))# [[0.10073292 0.14624784 0.40273923]#  [0.21844459 0.22226682 0.37246217]#  [0.50334257 0.01714939 0.47780388]#  [0.08755349 0.86500477 0.70566398]]

    作为uniform的另一特例,可以得到[low,high)之间均匀分布的随机整数。

    • numpy.random.randint(low, high=None, size=None, dtype='l') Return random integers from low (inclusive) to high (exclusive).

    【例】若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

    import numpy as npnp.random.seed(20200614)x = np.random.randint(2, size=10)print(x)# [0 0 0 1 0 1 0 0 0 0]x = np.random.randint(1, size=10)print(x)# [0 0 0 0 0 0 0 0 0 0]x = np.random.randint(5, size=(2, 4))print(x)# [[3 3 0 1]#  [1 1 0 1]]x = np.random.randint(1, 10, [3, 4])print(x)# [[2 1 7 7]#  [7 2 4 6]#  [8 7 2 8]]

    四、正态分布

    标准的正太分布数学表示:

    • numpy.random.randn(d0, d1, ..., dn) Return a sample (or samples) from the “standard normal” distribution.

    【例】根据指定大小产生满足标准正态分布的数组(均值为0,标准差为1)。

    import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsnp.random.seed(20200614)size = 50000x = np.random.randn(size)y1 = (np.sum(x < 1) - np.sum(x < -1)) / sizey2 = (np.sum(x < 2) - np.sum(x < -2)) / sizey3 = (np.sum(x < 3) - np.sum(x < -3)) / sizeprint(y1)  # 0.68596print(y2)  # 0.95456print(y3)  # 0.99744plt.hist(x, bins=20)plt.show()y1 = stats.norm.cdf(1) - stats.norm.cdf(-1)y2 = stats.norm.cdf(2) - stats.norm.cdf(-2)y3 = stats.norm.cdf(3) - stats.norm.cdf(-3)print(y1)  # 0.6826894921370859print(y2)  # 0.9544997361036416print(y3)  # 0.9973002039367398

    还可以指定分布以及所需参数来进行随机,例如高斯分布中的mu和sigma。

    • numpy.random.normal(loc=0.0, scale=1.0, size=None)Draw random samples from a normal (Gaussian) distribution.normal()为创建均值为 loc(mu),标准差为 scale(sigma),大小为 size 的数组。

    import numpy as npimport matplotlib.pyplot as pltnp.random.seed(20200614)x = 0.5 * np.random.randn(2, 4) + 5'''或者#模拟10000个随机变量x = 0.5*stats.norm.rvs(size=(2,4))+5'''print(x)# [[5.39654234 5.4088702  5.49104652 4.95817289]#  [4.31977933 4.76502391 4.70720327 4.36239023]]np.random.seed(20200614)mu = 5#平均值sigma = 0.5#标准差x = np.random.normal(mu, sigma, (2, 4))print(x)# [[5.39654234 5.4088702  5.49104652 4.95817289]#  [4.31977933 4.76502391 4.70720327 4.36239023]]size = 50000x = np.random.normal(mu, sigma, size)print(np.mean(x))  # 4.996403463175092print(np.std(x, ddof=1))  # 0.4986846716715106(#样本标准差)'''ddof:int, optionalMeans Delta Degrees of Freedom. The divisor used in calculations is N - ddof, where N represents the number of elements. By default ddof is zero.'''plt.hist(x, bins=20)plt.show()

    五、指数分布

    指数分布描述时间发生的时间长度间隔。

    指数分布的数学表示:

    • numpy.random.exponential(scale=1.0, size=None)Draw samples from an exponential distribution.

    【例】scale = 1/lambda

    import numpy as npimport matplotlib.pyplot as pltfrom scipy import statsnp.random.seed(20200614)lam = 7size = 50000x = np.random.exponential(1 / lam, size)'''或者#rvs(loc=0, scale=1/lam, size=size, random_state=None)模拟'''y1 = (np.sum(x < 1 / 7)) / sizey2 = (np.sum(x < 2 / 7)) / sizey3 = (np.sum(x < 3 / 7)) / sizeprint(y1)  # 0.63218print(y2)  # 0.86518print(y3)  # 0.95056plt.hist(x, bins=20)plt.show()y1 = stats.expon.cdf(1 / 7, scale=1 / lam)y2 = stats.expon.cdf(2 / 7, scale=1 / lam)y3 = stats.expon.cdf(3 / 7, scale=1 / lam)print(y1)  # 0.6321205588285577print(y2)  # 0.8646647167633873print(y3)  # 0.950212931632136

    其他随机函数

    随机从序列中获取元素

    • numpy.random.choice(a, size=None, replace=True, p=None)从序列中获取元素,若a为整数,元素取值从np.range(a)中随机获取;若a为数组,取值从a数组元素中随机获取。该函数还可以控制生成数组中的元素是否重复replace,以及选取元素的概率p。

    import numpy as npnp.random.seed(20200614)x = np.random.choice(10, 3)print(x)  # [2 0 1]x = np.random.choice(10, 3, p=[0.05, 0, 0.05, 0.9, 0, 0, 0, 0, 0, 0])print(x)  # [3 2 3]x = np.random.choice(10, 3, replace=False, p=[0.05, 0, 0.05, 0.9, 0, 0, 0, 0, 0, 0])print(x)  # [3 0 2]aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']x = np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])print(x) # ['pooh' 'rabbit' 'pooh' 'pooh' 'pooh']np.random.seed(20200614)x = np.random.randint(0, 10, 3)print(x)  # [2 0 1]

    对数据集进行洗牌操作

    numpy.random.shuffle(x) 对x进行重排序,如果x为多维数组,只沿第 0 轴洗牌,改变原来的数组,输出为None。

    • 【例】洗牌,改变自身内容,打乱顺序。

    import numpy as npnp.random.seed(20200614)x = np.arange(10)np.random.shuffle(x)print(x)# [6 8 7 5 3 9 1 4 0 2]print(np.random.shuffle([1, 4, 9, 12, 15]))# Nonex = np.arange(20).reshape((5, 4))print(x)# [[ 0  1  2  3]#  [ 4  5  6  7]#  [ 8  9 10 11]#  [12 13 14 15]#  [16 17 18 19]]np.random.shuffle(x)print(x)# [[ 4  5  6  7]#  [ 0  1  2  3]#  [ 8  9 10 11]#  [16 17 18 19]#  [12 13 14 15]]
    • numpy.random.permutation(x)permutation()函数的作用与shuffle()函数相同,可以打乱第0轴的数据,但是它不会改变原来的数组。

    import numpy as npnp.random.seed(20200614)x = np.arange(10)y = np.random.permutation(x)print(y)# [6 8 7 5 3 9 1 4 0 2]print(np.random.permutation([1, 4, 9, 12, 15]))# [ 4  1  9 15 12]x = np.arange(20).reshape((5, 4))print(x)# [[ 0  1  2  3]#  [ 4  5  6  7]#  [ 8  9 10 11]#  [12 13 14 15]#  [16 17 18 19]]y = np.random.permutation(x)print(y)# [[ 8  9 10 11]#  [ 0  1  2  3]#  [12 13 14 15]#  [16 17 18 19]#  [ 4  5  6  7]]

    关于“Numpy随机抽样如何实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Numpy随机抽样如何实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Numpy随机抽样如何实现

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Numpy随机抽样如何实现

    这篇文章主要介绍了Numpy随机抽样如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Numpy随机抽样如何实现文章都会有所收获,下面我们一起来看看吧。前言numpy.random 模块对 Python 内
    2023-07-05

    Numpy随机抽样的实现

    本文主要介绍了Numpy随机抽样的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-02

    MySQL中的随机抽取如何实现

    今天小编给大家分享一下MySQL中的随机抽取如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 引言现在有一个需求是
    2023-07-05

    Oracle实现某表随机抽取数据(随机性抽取)

    目录oracle实现某表随机抽取数据1. 使用随机数2. 使用sample函数3. 结合上述两种方式(随机数编程网+sample函数)Orapythoncle数据库:随机查询100条数据方法一方法二总结Oracle实现某表随机抽取数据目前
    Oracle实现某表随机抽取数据(随机性抽取)
    2024-08-13

    vue组件如何封装实现抽奖随机数

    今天小编给大家分享一下vue组件如何封装实现抽奖随机数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、子组件
    2023-06-29

    C语言如何实现随机抽取纸牌程序

    本篇内容主要讲解“C语言如何实现随机抽取纸牌程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现随机抽取纸牌程序”吧!程序设计要求本程序负责发一副标准纸牌,每张标准纸牌都有一种花色(
    2023-06-29

    MySQL中的随机抽取的实现

    目录1. 引言2. 内存临时表3. 磁盘临时表4. 优先队列排序算法1. 引言现在有一个需求是从一个单词表中每次随机选取三个单词。这个表的建表语句和如下所示:mysql> Create table 'words'('id' int(1
    2023-03-20

    python随机抽奖系统怎么实现

    要实现一个Python随机抽奖系统,可以按照以下步骤进行:1. 导入random模块,用于生成随机数。```pythonimport random```2. 创建一个参与抽奖的名单,可以使用列表或者字典来存储参与者的信息。```python
    2023-08-16

    Python如何实现随机采样及概率分布

    这篇文章主要介绍了Python如何实现随机采样及概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 二项(binomial)/伯努利(Bernoulli)分布1.1
    2023-06-22

    java简单随机抽奖功能怎么实现

    实现简单的随机抽奖功能可以使用Java的Random类来生成随机数。下面是一个简单的实现示例:```javaimport java.util.ArrayList;import java.util.List;import java.util.
    2023-08-31

    C语言怎么实现随机抽奖程序

    要实现随机抽奖程序,可以按照以下步骤进行:1. 导入头文件:```c#include #include #include ```2. 定义抽奖函数:```cint lottery(int min, int max) {// 使用当前时间作为
    2023-08-18

    Python中如何实现随机采样和概率分布

    这篇文章主要介绍了Python中如何实现随机采样和概率分布,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Python(包括其包Numpy)中包含了了许多概率算法,包括基础的
    2023-06-21

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录