python random -- 随机数

本文介绍了如何使用Python的random模块生成各种实数分布,如三角分布、指数分布、贝塔分布等,并通过实例展示了如何运用这些分布进行数据模拟。涵盖了对称、偏斜及特殊分布的讲解,适合初学者和数据科学家参考。
部署运行你感兴趣的模型镜像

加载相关库

import random
import seaborn as sns
import matplotlib.pyplot as plt

# 解决中文不显示的问题
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
# 解决正负号不显示问题
plt.rcParams['axes.unicode_minus']=False 

一、random基础

random.random()                                  # 返回随机生成的一个实数,它在[0,1)范围内。
random.randint(1,10)                             # 产生 1 到 10 的一个整数型随机数
random.randrange(1,100,2)                        # 生成从1到100的间隔为2的随机整数
random.uniform(1.1,5.4)                          # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
random.choice('tomorrow')                        # 从序列中随机选取一个元素
random.sample('zyxwvutsrqponmlkjihgfedcba',5)    # 多个字符中生成指定数量的随机字符

# 打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
random.shuffle(items)
print(items)

items:[3, 8, 4, 1, 7, 0, 6, 2, 9, 5]

二、实数分布

2.1 对称分布
  • random.triangular(low, high, mode)
  • 返回一个随机浮点数 N ,使得 low <= N <= high 并在这些边界之间使用指定的 mode 。 low 和 high 边界默认为零和一。 mode 参数默认为边界之间的中点,给出对称分布。
n = 10000
x = [random.triangular(1, 10, 2) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.2 指数分布
  • random.expovariate(lambd)
  • lambd 是 1.0 除以所需的平均值,它应该是非零的。 (该参数本应命名为 “lambda” ,但这是 Python 中的保留字。)如果 lambd 为正,则返回值的范围为 0 到正无穷大;如果 lambd 为负,则返回值从负无穷大到 0。
n = 10000
x = [random.expovariate(1) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.3 Beta 分布
  • random.betavariate(alpha, beta)
  • 参数的条件是 alpha > 0 和 beta > 0。 返回值的范围介于 0 和 1 之间。
n = 10000
x = [random.betavariate(1, 1) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.4 Gamma 分布
  • random.gammavariate(alpha, beta)
  • ( 不是 gamma 函数! ) 参数的条件是 alpha > 0 和 beta > 0。
n = 10000
x = [random.gammavariate(10, 10) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.5 高斯分布
  • random.gauss(mu, sigma)
  • mu 是平均值,sigma 是标准差。 这比下面定义的 normalvariate() 函数略快。
n = 10000
x = [random.gauss(10, 1) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.6 对数正态分布
  • random.lognormvariate(mu, sigma)
  • 如果你采用这个分布的自然对数,你将得到一个正态分布,平均值为 mu 和标准差为 sigma 。 mu 可以是任何值,sigma 必须大于零。
n = 10000
x = [random.lognormvariate(-100, 1) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.7 正态分布
  • random.normalvariate(mu, sigma)
  • mu 是平均值,sigma 是标准差。
n = 10000
x = [random.normalvariate(100, 10) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.8 冯·米塞斯分布
  • random.vonmisesvariate(mu, kappa)
  • mu 是平均角度,以弧度表示,介于0和 2pi 之间,kappa 是浓度参数,必须大于或等于零。 如果 kappa 等于零,则该分布在 0 到 2pi 的范围内减小到均匀的随机角度.
n = 10000
x = [random.vonmisesvariate(4, 0) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.9 帕累托分布
  • random.paretovariate(alpha)
  • alpha 是形状参数。
n = 10000
x = [random.paretovariate(100) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

2.10 威布尔分布
  • random.weibullvariate(alpha, beta)
  • alpha 是比例参数,beta 是形状参数。
n = 10000
x = [random.weibullvariate(100,10) for i in range(n)]
sns.distplot(x)  # 默认

在这里插入图片描述

  • 参考1:https://www.runoob.com/python/func-number-random.html
  • 参考2:https://docs.python.org/zh-cn/3.7/library/random.html

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

要生成介于0.01到0.05之间的随机数,可以利用Python中的`numpy.random.uniform()`函数或者`random.uniform()`函数。以下是两种实现方式的具体说明: ### 使用 `numpy.random.uniform()` 通过设置参数来定义随机数的范围以及数量。例如,生成单个位于[0.01, 0.05]区间的随机浮点数[^1]。 ```python import numpy as np # 生成一个在 [0.01, 0.05) 范围内的均匀分布随机数 uniform_random_number = np.random.uniform(0.01, 0.05) print(uniform_random_number) ``` 如果需要生成多个随机数,则可以通过调整第三个参数指定数组大小。比如生成10个这样的随机数。 ```python # 生成 10 个在 [0.01, 0.05) 范围内的均匀分布随机数 uniform_random_numbers = np.random.uniform(0.01, 0.05, 10) print(uniform_random_numbers) ``` ### 使用 `random.uniform()` 另一种方法是调用标准库`random`模块下的`uniform()`函数,其功能相同但适用于单一数值操作场景[^2]。 ```python import random # 生成一个在 [0.01, 0.05] 范围内的均匀分布随机数 single_uniform_random_number = random.uniform(0.01, 0.05) print(single_uniform_random_number) ``` 对于批量生产需求,可结合列表推导式完成多次抽样过程。 ```python # 利用 list comprehension 批量生成 10 个 [0.01, 0.05] 范围内的随机数 multiple_uniform_random_numbers = [random.uniform(0.01, 0.05) for _ in range(10)] print(multiple_uniform_random_numbers) ``` 以上两种方案均能有效满足题目要求,具体选用取决于实际应用场景和个人偏好。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值