一篇搞懂Python中的随机数

在 python 中生成随机样本的所有你需要的示例列表

长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩

在这篇博客中,我将演示如何根据不同的需求在python中生成样本随机数。使用随机和 Numpy。

import random
import numpy as np

内容

  • 场景1:获取随机整数

  • 场景2:获取带小数的随机数

  • 场景3:获取具有已知统计数据/分布的随机数

  • 场景4:使用现有的数字列表

场景一:获取随机整数

如果您只需要 0 到 10 之间的随机整数:

random.randint(0, 10)

# 7

如果您需要 0 到 10 之间的随机整数列表(例如 15):

np.random.randint(0, 10, 15)

# array([4, 4, 3, 0, 0, 1, 6, 9, 5, 3, 1, 6, 8, 5, 9])

如果你想得到一个非常随机和超大的整数,你可以这样做:

import time
int(time.time())

# 1669855560

场景二:获取带小数的随机数

获取 0 到 1 之间的随机数:

random.random()

# 0.4353251333114442

获取 0 到 10 之间的随机数:

random.uniform(0, 10)

# 9.210714292877288

如果您需要 0 到 10 之间的随机数列表(例如 5):

np.random.uniform(0, 10, 5)

# array([8.70816807, 5.13392407, 0.4998664 , 5.97627955, 2.15261284])

场景三:获取具有已知统计数据/分布的随机数

如果您已经知道所需样本的均值、众数和最大值,您可能想尝试三角函数。它有一个很酷的参数,称为模式:分布峰值出现的值。该值必须满足条件 left <= mode <= right。如果我们将它设置为 5,样本将更有可能出现在 5 左右。

np.random.triangular(0, 5, 10, 5) # left, mode, right, sample

# [3.7525956  5.16902974 3.79206193 8.46765312 6.23403873]

如果您想从二项分布中抽取样本,您可以尝试一个名为binomial的函数。如果我们设置 n = 20,p = 0.25,大小为 2000:

sample = np.random.binomial(20, 0.25, 2000)
import matplotlib.pyplot as plt
plt.hist(sample)

当您想从给定的均值 (50) 和标准差 (3) 生成随机数时:

random.normalvariate(50,3)

# 49.25030663269399

当您想创建一个随机数列表(例如 5)时,给定一个已知的均值 (50) 和一个标准差 (3):

[random.normalvariate(50,3) for _ in range(5)]

# [49.873333367806644, 45.72729827453879, 47.69029669578644, 
# 48.25661520735196, 47.26944802688148]

np.random.normal(50, 3, 5)

# array([47.18605431, 48.9894249 , 49.50258396, 49.85496526, 48.1503549 ])

当您想生成总和为某个值 (1) 的随机数列表(例如 10)时,您将需要名为dirichlet的函数。

sample = np.random.dirichlet(np.ones(10), size=1)
print(sample)
print(np.sum(sample))

# [[0.23988202 0.08378129 0.19439318 0.04282444 0.01568082 0.04033996
#   0.07864523 0.10856321 0.18118435 0.0147055 ]]

# 1.0000000000000002

场景四:使用现有的数字列表

假设我们有一个数字列表,如下所示:

sample = np.random.randint(0, 10, 20)
sample

# array([0, 3, 1, 1, 0, 2, 5, 1, 0, 7, 3, 6, 6, 9, 3, 7, 0, 5, 6, 6])

如果你想随机洗牌样本:

np.random.shuffle(sample)
sample

# array([1, 3, 7, 5, 3, 0, 6, 0, 0, 1, 3, 2, 9, 6, 6, 7, 6, 1, 5, 0])

如果要从样本中随机获取 5 个元素:

for _ in  range ( 5 ): 
  print (np.random.choice(sample)) 

# 1 
# 7 
# 6 
# 9 
# 0

如果你想随机排列一个序列或返回一个排列的范围,下面是你可以做什么的几个例子:

np.random.permutation( 10 ) 

# array([2, 5, 0, 3, 1, 7, 8, 4, 6, 9])

 np.random.permutation(sample) 

# array([2, 0, 3 , 9, 6, 0, 3, 6, 5, 5, 6, 0, 7, 6, 0, 1, 1, 1, 7, 3])

 arr = np.arange( 9 ).reshape(( 3 , 3 )) 
np.random.permutation(arr) 

# array([[3, 4, 5], 
# [6, 7, 8], 
# [0, 1, 2]])

结论

这篇简短的博客总结了许多在 python 中生成随机数的流行技术。了解这些技巧应该可以帮助您根据需要生成虚拟数据。

推荐书单

《PyTorch深度学习简明实战 》

本书针对深度学习及开源框架——PyTorch,采用简明的语言进行知识的讲解,注重实战。全书分为4篇,共19章。深度学习基础篇(第1章~第6章)包括PyTorch简介与安装、机器学习基础与线性回归、张量与数据类型、分类问题与多层感知器、多层感知器模型与模型训练、梯度下降法、反向传播算法与内置优化器。计算机视觉篇(第7章~第14章)包括计算机视觉与卷积神经网络、卷积入门实例、图像读取与模型保存、多分类问题与卷积模型的优化、迁移学习与数据增强、经典网络模型与特征提取、图像定位基础、图像语义分割。自然语言处理和序列篇(第15章~第17章)包括文本分类与词嵌入、循环神经网络与一维卷积神经网络、序列预测实例。生成对抗网络和目标检测篇(第18章~第19章)包括生成对抗网络、目标检测。

本书适合人工智能行业的软件工程师、对人工智能感兴趣的学生学习,同时也可作为深度学习的培训教程。

作者简介:

日月光华:网易云课堂资深讲师,经验丰富的数据科学家和深度学习算法工程师。擅长使用Python编程,编写爬虫并利用Python进行数据分析和可视化。对机器学习和深度学习有深入理解,熟悉常见的深度学习框架( PyTorch、TensorFlow)和模型,有丰富的深度学习、数据分析和爬虫等开发经验,著有畅销书《Python网络爬虫实例教程(视频讲解版)》。

链接:https://item.jd.com/13528847.html

精彩回顾

《Pandas1.x实例精解》新书抢先看!

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

长按关注《Python学研大本营》

长按二维码,加入Python读者群

扫码关注《Python学研大本营》,加入读者群,分享更多精彩

https://towardsdev.com/all-kinds-of-randoms-in-python-9e382b23fb7b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值