Numpy的np.random随机模块详解

 更新时间:2023年08月18日 11:52:25   作者:Clichong  
这篇文章主要介绍了Numpy的np.random随机模块详解,平时都会使用到随机模块,一般是torch.random或者是numpy.random,有或者是直接使用ramdom这个python内置的工具包,那么下面就简单记录一下numpy.random常用的函数,需要的朋友可以参考下

1. 随机抽样

import numpy as np
np.random.randn(3,3) # 从标准正太分布中返回样本
np.random.rand(3,3)  # 从0-1均匀分布分布中返回样本
np.random.randint(0, 10, size=(3,3))     # 返回随机的整数,左闭右开区间[)
np.random.random_integers(0, 10, (3,3))  # 返回随机的整数,位于闭区间[]
np.random.random((3,3))          # 返回范围[0., 1.)之间的随机浮点数
np.random.random_sample((3,3))   # 返回范围[0., 1.)之间的随机浮点数
np.random.ranf((3,3))            # 返回范围[0., 1.)之间的随机浮点数
np.random.sample((3,3))          # 返回范围[0., 1.)之间的随机浮点数
# 从[0,5)中挑选3个数,其权重分别为p,其中np.random.choice(5, 3) == np.random.randint(0, 5, 3)
np.random.choice(5, 3, p=[0.1, 0.25, 0.15, 0.4, 0.1])  # 从样本中根据对应的权重返回随机选择索引,权重越大越可能被选择到

2. 随机排序

import numpy as np
np.random.shuffle(arr)  # 随机打乱顺序,直接是内置的,不需要返回
arr = np.random.permutation(arr)   # 随机打乱顺序,需要返回

3. 随机分布

分布函数分布说明
[beta(a, b, size])贝塔分布样本,在 [0, 1]内。
[binomial(n, p, size])二项分布的样本。
[chisquare(df, size])卡方分布样本。
[dirichlet(alpha, size])狄利克雷分布样本。
[exponential(scale, size])指数分布
[f(dfnum, dfden, size])F分布样本。
[gamma(shape, scale, size])伽马分布
[geometric(p, size])几何分布
[gumbel(loc, scale, size])耿贝尔分布
[hypergeometric(ngood, nbad, nsample, size])超几何分布样本。
[laplace(loc, scale, size])拉普拉斯或双指数分布样本
[logistic(loc, scale, size])Logistic分布样本
[lognormal(mean, sigma, size])对数正态分布
[logseries(p, size])对数级数分布。
[multinomial(n, pvals, size])多项分布
[multivariate_normal(mean, cov, size])多元正态分布。
[negative_binomial(n, p, size])负二项分布
[noncentral_chisquare(df, nonc, size])非中心卡方分布
[noncentral_f(dfnum, dfden, nonc, size])非中心F分布
[normal(loc, scale, size])正态(高斯)分布
[pareto(a, size])帕累托(Lomax)分布
[poisson(lam, size])泊松分布
[power(a, size])功率分布
[rayleigh(scale, size])Rayleigh 分布
[standard_cauchy(size])标准柯西分布
[standard_exponential(size])标准的指数分布
[standard_gamma(shape, size])标准伽马分布
[standard_normal(size])标准正态分布 (mean=0, stdev=1).
[standard_t(df, size])标准学生 t 分布
[triangular(left, mode, right, size])三角形分布
[uniform(low, high, size])均匀分布
[vonmises(mu, kappa, size])von Mises分布
[wald(mean, scale, size])瓦尔德(逆高斯)分布
[weibull(a, size])Weibull 分布
[zipf(a, size])齐普夫分布

4. 随机种子

# 1. RandomState随机种子的使用:numpy.random.RandomState实例对象是线程安全的
from numpy.random import RandomState
r = RandomState(1234567890)
a = r.randint(1, 10,size=10)
r = RandomState(1234567890)
b = r.randint(1, 10, size=10)
r = RandomState(1234567890)
c = r.randint(1, 10, size=10)
r = RandomState(1234567890)
d = r.randint(1, 10, size=10)
a,b,c,d
# 输出:
# (array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]))
# 分析:由于每次输出前都设置了相同的随机种子,所以程序得到的随机数的值相同
# 2. np.random.seed随机种子的使用:numpy.random.seed()不是线程安全的
# 如果程序中有多个线程最好使用numpy.random.RandomState实例对象来创建或者使用random.seed()来设置相同的随机数种子。
np.random.seed(1234567890)
a = np.random.randint(1, 10, size=10)
np.random.seed(1234567899)
b = np.random.randint(1, 10, size=10)
np.random.seed(1234567890)
c = np.random.randint(1, 10, size=10)
np.random.seed(1234567899)
d = np.random.randint(1, 10, size=10)
a,b,c,d
# 输出:
# (array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([4, 9, 1, 7, 2, 8, 8, 3, 3, 4]),
#  array([3, 7, 4, 2, 5, 1, 7, 5, 1, 8]),
#  array([4, 9, 1, 7, 2, 8, 8, 3, 3, 4]))
# 分析:由于第一次与第三次输出前设置了相同的随机种子,而第二次与第四次输出前设置了相同的随机种子
# 所以第一次与第三次输出一致,第二次与第四次输出一致。
# 3. ramdom随机种子的使用
import random
random.seed(1234567890)
a = random.sample(range(10),10)  
random.seed(1234567890)
b = random.sample(range(10),10)
c = random.sample(range(10),10)
d = random.sample(range(10),10)
a,b,c,d
# 输出:
# ([9, 2, 7, 1, 4, 8, 5, 0, 6, 3],
#  [9, 2, 7, 1, 4, 8, 5, 0, 6, 3],
#  [6, 2, 0, 5, 8, 9, 4, 1, 7, 3],
#  [2, 7, 3, 8, 6, 1, 4, 9, 0, 5])
# 分析:由于第一次与第二次输出前设置了相同的随机种子,所以输出结果一致;
# 而剩下两次没有设置随机种子,随意两次结果都是随机输出的,分别不同

拓展,在训练开始时,参数的初始化是随机的,为了让每次的结果一致,我们需要设置随机种子。

torch中的随机种子使用如下:

opt.seed = random.randint(1, 10000)
print("Random Seed: ", opt.seed)
torch.manual_seed(args.seed)		# 为CPU设置随机种子
if cuda:
    torch.cuda.manual_seed(seed)	# 为当前GPU设置随机种子
    torch.cuda.manual_seed_all(seed)# 为所有GPU设置随机种子

到此这篇关于Numpy的np.random随机模块详解的文章就介绍到这了,更多相关Numpy随机模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python用字节处理文件实例讲解

    python用字节处理文件实例讲解

    在本篇文章里小编给大家整理的是一篇关于python用字节处理文件实例讲解内容,有兴趣的朋友们可以学习参考下。
    2021-04-04
  • 对Django中时区的解读

    对Django中时区的解读

    这篇文章主要介绍了对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Python快速实现一键抠图功能的全过程

    Python快速实现一键抠图功能的全过程

    你有没想过,Python也能成为这样的一种工具:在只有一张图片,需要细致地抠出人物的情况下,能帮你减少抠图步骤,这篇文章主要给大家介绍了关于Python快速实现一键抠图功能的相关资料,需要的朋友可以参考下
    2021-06-06
  • sklearn中make_blobs的用法详情

    sklearn中make_blobs的用法详情

    这篇文章主要介绍了sklearn中make_blobs的用法详情,sklearn中的make_blobs函数主要是为了生成数据集的,下面文章的学习内容,需要的小伙伴可以参考一下
    2022-01-01
  • Python基于wxPython和FFmpeg开发一个视频标签工具

    Python基于wxPython和FFmpeg开发一个视频标签工具

    在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行分类整理,一个高效的视频标签工具都是不可或缺的,本文将详细分析一个基于Python、wxPython和FFmpeg开发的视频标签工具
    2025-04-04
  • Django使用rest_framework写出API

    Django使用rest_framework写出API

    这篇文章主要介绍了Django使用rest_framework写出API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python字典的基本用法实例分析【创建、增加、获取、修改、删除】

    Python字典的基本用法实例分析【创建、增加、获取、修改、删除】

    这篇文章主要介绍了Python字典的基本用法,结合具体实例形式分析了Python字典的创建、增加、获取、修改、删除等基本操作技巧与注意事项,需要的朋友可以参考下
    2019-03-03
  • Python 给屏幕打印信息加上颜色的实现方法

    Python 给屏幕打印信息加上颜色的实现方法

    这篇文章主要介绍了Python 给屏幕打印信息加上颜色的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python中Tkinter组件Listbox的具体使用

    Python中Tkinter组件Listbox的具体使用

    本文主要介绍了Python中Tkinter组件Listbox的具体使用,Listbox组件用于显示一个选择列表,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 基于PyQt5制作一个数据图表生成器

    基于PyQt5制作一个数据图表生成器

    这篇文章主要介绍了如何利用PyQT5制作一个数据图表生成器,可以通过Pyecharts模块生成可视化的html数据图表,感兴趣的小伙伴可以跟随小编学习一下
    2022-02-02

最新评论