python⽣成随机数⼀、Python标准库中的random函数
import random
1.random.random()
⽤于⽣成⼀个0到1的随机浮点数: 0 <= n < 1.0
2.random.randint(start,stop)
随机⽣成[start,stop]区间内的整数
3.random.uniform(start,stop)
填补random()的缺陷,可以设置两个参数,下限和上限,⽣成区间内的分数
4.random.choice(series)
从序列中返回⼀个任意的元素,series可为字符串、列表、元组
5.random.sample(series,num)
从序列series中返回任意num个元素,返回⼀个序列
6. random.shuffle(series)
将序列的所有元素打乱
7.random.randrange (start,stop ,step)
返回区间[start,stop)按指定递增基数step集合中的⼀个随机数,基数缺省值为1。
例如,random.randrange (0, 20 ,5)
[0,20)按基数为5递增的集合为[0,5,10,15],在该集合中随机取⼀个数
代码⽰例:
import random
## ⽣成⼀个0到1的随机浮点数
random.random()
## Out[1]:0.09706381980481515
## ⽣成[1,4]区间内的整数
random.randint(1,4)
## Out[2]:2
## ⽣成[1,4]区间内的分数
random.uniform(1,4)
## Out[3]:3.9569812254916856
## 从序列中返回⼀个任意的元素
random.choice([1,2,3,4])
## Out[4]:2
## 从序列series中返回任意2个元素
python生成1到100之间随机数random.sample([1,2,3,4],2)
## Out[5]:[2, 3]
## 将序列的所有元素打乱
list=[1,2,3,4]
random.shuffle(list)
list
## Out[6]:[3, 1, 4, 2]
## 返回区间[0,20)按指定递增基数5集合中的⼀个随机数random.randrange (0,20,5)
## Out[7]:10
⼆、Python标准库中的numpy函数
import numpy as np
随机数⽣成模块numpy.random
1.⽣成器
种随机数种⼦,根据同⼀种⼦产⽣的随机数是相同的定义全局种⼦:seed([seed]),参数为整数或者矩阵代码⽰例:
import numpy as np
np.random.seed(123)#设置随机种⼦为123
2.简单随机数
产⽣简单的随机数据,可以是任何维度
代码⽰例:
import numpy as np
## 产⽣2⾏3列均匀分布随机数组
np.random.rand(2,3)
## Out[8]:array([[0.64783015, 0.74924762, 0.12333907],
## [0.44305453, 0.62676146, 0.17366148]])
## 3⾏3列正态分布随机数据
np.random.randn(3,3)
## Out[9]:array([[ 0.46551625, 0.41251493, 0.1223511 ],
## [-0.58531667, -0.0187292 , -0.62425071],
## [-0.33741965, -0.06341708, -0.38698573]]),
## (1,10)以内的5⾏5列随机整数
np.random.randint(1,10,[5,5])
## Out[10]:array([[5, 1, 1, 9, 8],
## [4, 8, 5, 4, 7],
## [9, 4, 4, 5, 3],
## [2, 5, 9, 8, 7],
## [3, 3, 1, 3, 5]])
## (0,1)以内10个随机浮点数
np.random.random(10)
## Out[11]:array([0.23234971, 0.18586494, 0.15506408, 0.69217427, 0.13629773,
## 0.30373232, 0.25942041, 0.43554809, 0.68500132, 0.12891991])
## [0,10)内随机选择⼀个数
np.random.choice(10)
## Out[12]:4
3.分布
产⽣指定分布的数据,如⾼斯分布等
函数名称函数功能参数说明
均匀分布uniform([low, high, size])low:下界;high:上界;size:返回个数正态(⾼斯)分布normal([loc, scale, size])loc:均值;scale:标准差
代码⽰例:
import numpy as np
## 均匀分布
np.random.uniform(low=2,high=4,size=2)
## Out[13]:array([2.09099648, 2.2292535 ])
## 正态分布
al(1,3)
## Out[14]:1.2474069345999501
## 正态分布图像
import numpy as np
import matplotlib.pyplot as plt
mu =1#期望为1
sigma =3#标准差为3
num =10000#个数为10000
rand_data = al(mu, sigma, num)
count, bins, ignored = plt.hist(rand_data,30, normed=True)
plt.plot(bins,1/(sigma * np.sqrt(2* np.pi))*np.exp(-(bins - mu)**2/(2* sigma**2)), linewidth=2, color='r')
plt.show()
4.排列
函数名称函数功能参数说明shuffle(x)打乱对象x(多维矩阵按照第⼀维打乱)矩阵或者列表permutation(x)打乱并返回该对象(多维矩阵按照第⼀维打乱)整数或者矩阵代码⽰例:
## ⽣成3⾏4列整数矩阵
rand_data = np.random.randint(1,10,(3,4))
rand_data
## Out[15]:array([[5, 5, 3, 6],
## [4, 7, 3, 7],
## [5, 2, 1, 6]])
## shuffle(x)
np.random.shuffle(rand_data)
rand_data
## Out[16]:array([[4, 7, 3, 7],
## [5, 5, 3, 6],
## [5, 2, 1, 6]])
## permutation(x)
np.random.permutation(rand_data)
## Out[16]:array([[4, 7, 3, 7],
## [5, 5, 3, 6],
## [5, 2, 1, 6]])
三、按照指定概率⽣成随机数
1.按照指定概率从数字列表中随机抽取数字
代码⽰例:
# 定义从⼀个数字列表中以⼀定的概率取出对应区间中数字的函数
def get_number_by_pro(number_list, pro_list):
"""
:param number_list:数字列表
:param pro_list:数字对应的概率列表
:return:按概率从数字列表中抽取的数字
"""
# ⽤均匀分布中的样本值来模拟概率
x = random.uniform(0,1)
# 累积概率
cum_pro =0.0
# 将可迭代对象打包成元组列表
for number, number_pro in zip(number_list, pro_list):
cum_pro += number_pro
if x < cum_pro:
print("概率为:",x)
return number
# 主模块
if __name__ =="__main__":
# 数字列表
num_list =[1,2,3,4,5]
# 对应的概率列表
pr_list =[0.1,0.3,0.1,0.4,0.1]
# 函数调⽤
n = get_number_by_pro(number_list=num_list, pro_list=pr_list)
print("返回的值为:",n)
## Out[17]:概率为: 0.8595909698867323
## 返回的值为: 4
2.按照指定概率从区间列表中的某个区间内⽣成随机数代码⽰例:
# 定义从⼀个数字列表中以⼀定的概率取出对应区间中数字的函数def get_number_by_pro(number_list, pro_list):
"""
:param number_list:数字列表
:param pro_list:数字对应的概率列表
:return:按概率从数字列表中抽取的数字
"""
# ⽤均匀分布中的样本值来模拟概率
x = random.uniform(0,1)
# 累积概率
cum_pro =0.0
# 将可迭代对象打包成元组列表
for number, number_pro in zip(number_list, pro_list):
cum_pro += number_pro
if x < cum_pro:
# 从区间[number - 1,number]上随机抽取⼀个值
num = np.random.uniform(number -1,number)
print("概率为:",x)
# 返回值
return num
# 主模块
if __name__ =="__main__":
# 数字列表
num_list =[1,2,3,4,5]
# 对应的概率列表
pr_list =[0.1,0.3,0.1,0.4,0.1]
# 函数调⽤
n = get_number_by_pro(number_list=num_list, pro_list=pr_list) print("返回的值为:",n)
## Out[17]:概率为: 0.21397703796534095
## 返回的值为: 1.707879438208344
3.列表个数较少时,可使⽤choice
⽰例:随机⽣成2或4,2的概率⽐较⼤
代码⽰例:
random.choice([2,2,2,4])
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论