概述
前言: 在此总结python中常见用于生成随机数、随机数组、随机小数、随机数列表等的各种方法,会持续更新!!!
目前使用的库函数为:
- random库
- numpy库
- …
文章目录
- 一、random库生成随机*
- 1.1生成随机整数
- 1.2生成随机浮点数
- 1.3随机选择
- 1.4生成随机数列表
- 二、numpy.random库生成随机数组
- 2.1产生随机数组
- 2.2 排序操作
- 2.3 随机数生成器
一、random库生成随机*
- random.random()
- random.uniform(a,b)
- random.randint(a,b)
- random.randrange(a,b,step)
- random.chioce(sequence)
- random.shuffle()
- random.sample(sequence,k)
1.1生成随机整数
生成(a,b)范围内的一个随机整数,包括a,b(均匀分布)
>>> import random
>>> random.randint(1,10)
10
>>> random.randint(1,10)
1
random.randrange函数
random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。
如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。
random.randrange(10, 100, 2)在结果上与random.choice(range(10, 100, 2) 等效。
1.2生成随机浮点数
random.random()无需参数,生成0-1范围内的小数。(均匀分布)
random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。
如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
1.3随机选择
random.choice函数
random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。
参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。
>>> list=['abc',666,'ok']
>>> random.choice(list)
'ok'
random.sample函数
random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
>>> x=[1,2,3,4,5,6,7]
>>> y=random.sample(x,3)
>>> y
[4, 2, 7]
>>> x
[1, 2, 3, 4, 5, 6, 7]
从原有列表中获取指定个数元素后,不修改原有列表顺序
random.shuffle函数
random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱
>>> x=[1,2,3,4,5,6,7]
>>> random.shuffle(x)
>>> x
[4, 1, 2, 5, 3, 6, 7]
1.4生成随机数列表
例一: 生成一个一维整数列表,整数范围(0,10),元素个数为10:
>>> list=[random.randint(0,10) for _ in range(0,10)]
>>> list
[10, 4, 7, 9, 6, 4, 5, 7, 3, 4]
>>> list=[random.choice(range(0,10)) for _ in range(0,7)]
>>> list
[2, 2, 8, 4, 0, 9, 7]
例二: 生成一维整数列表,整数范围为(0,10),元素个数为7,并且元素不重复
>>> list=random.sample(range(0,10),7)
>>> list
[0, 7, 2, 5, 9, 4, 3]
或者直接给出0-10的顺序序列,用shuffle()函数将其打乱
取前7个元素构成新列表即可
例三: 生成二维列表,整数范围为(0,10),元素个数为7,并且元素不重复
>>> list=[random.sample(range(0,10),7) for _ in range(3)]
>>> list
[[5, 4, 7, 2, 3, 9, 8], [4, 5, 1, 2, 6, 0, 8], [2, 9, 5, 4, 8, 3, 7]]
例四: 生成二维随机小数列表,且列表相邻小数相加为1
>>> list=[[random.random(),1-random.random()] for _ in range(0,5)]
>>> list
[[0.8968766599881403, 0.19938521097497552], [0.9286790198189612, 0.8404744240400294], [0.3560054380587584, 0.07926684952619589], [0.025104930171715334, 0.8088029379172177], [0.961551047514721, 0.7347595785170253]]
注意:为何第二次可以用1-random.random()呢?
说明,[random.random(),1-random.random()]是作为一句话进行执行的。
二、numpy.random库生成随机数组
- np.random.rand()
- np.random.randn()
- np.random.randint(low[, high, size])
- random_integers(low[, high, size])
- np.random.shuffle(x)
用numpy库函数生成的随机数组是 <class ‘numpy.ndarray’>格式。注意,不要与列表混淆。
2.1产生随机数组
- numpy.random.rand(d1,d2,d3…dn):生成一个[0,1)之间的随机浮点数或N维浮点数组。
>>>import numpy as np
>>>np.random.rand(10) #生成shape = 10 的一维随机数组
Out[1]:
array([ 0.7154292 , 0.65042837, 0.99854959, 0.1219843 , 0.8993502 ,
0.61108002, 0.18613111, 0.82756742, 0.77026329, 0.52016216])
>>>np.random.rand(2,4) ##生成shape = (2,4) 的二维随机数组
Out[2]:
array([[ 0.5644889 , 0.10957407, 0.77592356, 0.21419645],
[ 0.5584306 , 0.70697347, 0.0706628 , 0.45280476]])
- numpy.random.randn(d1,d2,d3…dn):生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数。
>>>import numpy as np
>>>np.random.randn(10) #生成shape = 10的、满足正态分布的一维随机数组
Out[1]:
array([-2.68867714, 1.30553568, -1.89705101, 0.22017578, 0.17460159,
-0.4780114 , 0.43347645, 0.18678857, 0.31898526, -0.07099354])
>>>np.random.randn(2,4) #生成shape = (2,4)的、满足正态分布的二维随机数组
Out[2]:
array([[ 0.1996084 , 0.0290392 , 1.21453716, 0.27951229],
[ 0.91439426, 0.37279807, 0.02867786, 0.31190854]])
- numpy.random.randint(low, high, size):返回随机的整数,位于半开区间 [low, high)。
>>>import numpy as np
>>>np.random.randint(10, size=10) #生成一个位于半闭区间[0,10)内的size = 10一维随机整数数组
Out[1]: array([8, 0, 8, 4, 4, 0, 2, 0, 3, 2])
>>>np.random.randint(10, size=(2,5)) #生成一个位于半闭区间[0,10)内的size = (2,5)二维随机整数数组
Out[2]:
array([[4, 8, 9, 1, 7],
[5, 2, 2, 9, 1]])
>>>np.random.randint(0, 5, size=(2,5)) #生成一个位于半闭区间[0,5)内的size = (2,5)二维随机整数数组
Out[3]:
array([[3, 4, 1, 2, 0],
[3, 0, 1, 2, 1]])
- numpy.random.standard_normal(size=None):生产一个浮点数或N维浮点数组,取数范围:标准正态分布随机样本。
>>>import numpy as np
>>>np.random.standard_normal(10) #生成shape = 10的、满足标准正态分布的一维随机数组
Out[1]:
array([-1.22636697, -1.23204532, 1.53296935, -0.43775173, -0.92269813,
-0.58454018, -0.02354275, 1.01765777, -0.2336743 , 0.80389956])
>>>np.random.standard_normal((2,4)) #生成shape = (2,4)的、满足标准正态分布的二维随机数组
Out[2]:
array([[-0.51991048, -1.26169166, 0.2132792 , 0.23725484],
[ 1.23004584, 0.90366112, -0.11723758, 0.32600119]])
- numpy.random.choice( a, size=None, replace=True, p=None ):从序列中获取元素,若a为整数,元素取值为np.range(a)中随机数;若a为数组,取值为a数组元素中随机元素。
>>>import numpy as np
>>>np.random.choice(2) #生成一个range(2)中的随机数
Out[2]: 1
>>>np.random.choice(2,2) #生成一个shape = 2 一维数组
Out[3]: array([1, 1])
>>>np.random.choice(5,(2,3)) #生成一个shape = (2,3) 二维数组
Out[4]: array([[4, 1, 1],
[2, 4, 4]])
np.random.choice(np.array(['a','b','c','f'])) #生成一个np.array(['a','b','c','f']中随机元素
Out[5]: 'f'
np.random.choice(5, p=[0,0,0,0,1]) #以p的概率来生成随机数,生成的始终是4
Out[6]: 4
np.random.choice(5,3,p=[0,0.5,0.5,0,0]) #生成shape = 3的一维数组,元素取值为1或2的随机数
Out[7]: array([2, 2, 2], dtype=int64)
2.2 排序操作
- numpy.random.shuffle ( x ):现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
>>>import numpy as np
>>>A = np.arange(10)
>>>print(A)
[0 1 2 3 4 5 6 7 8 9]
>>>np.random.shuffle(A)
>>>print(A)
[3 0 7 4 9 5 2 1 6 8]
>>>B = np.arange(9).reshape((3, 3))
>>>print(B)
Out[1]: array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>>np.random.shuffle(B)
>>>print(B)
Out[11]: array([[6, 7, 8],
[0, 1, 2],
[3, 4, 5]])
- numpy.random.permutation ( x ):返回一个随机排列
>>>import numpy as np
>>>np.random.permutation(10)
Out[1]: array([7, 9, 5, 0, 3, 6, 1, 4, 8, 2])
>>>np.random.permutation([1, 4, 9, 12, 15])
Out[2]: array([ 1, 9, 15, 12, 4])
>>>A = np.arange(9).reshape((3, 3))
>>>print(A)
Out[3]: array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>>np.random.permutation(A)
Out[4]: array([[0, 1, 2],
[6, 7, 8],
[3, 4, 5]])
2.3 随机数生成器
- numpy.random.RandomState():指定种子值是为了使同样的条件下每次产生的随机数一样,避免程序调试时由随机数不同而引起的问题。
>>>import numpy as np
>>>np.random.RandomState(2018).randn(2,3) #第一次产生(2,3)的数组
Out[3]:
array([[-0.2767676 , 0.581851 , 2.14839926],
[-1.279487 , 0.50227689, 0.8560293 ]])
>>>np.random.RandomState(2018).randn(2,3) #第二次产生(2,3)的数组
Out[4]:
array([[-0.2767676 , 0.581851 , 2.14839926],
[-1.279487 , 0.50227689, 0.8560293 ]])
>>>np.random.randn(2,3) #不指定种子数,第一次产生(2,3)的数组
Out[5]:
array([[-0.23270408, -0.94468073, -1.2362389 ],
[ 0.1987348 , 0.78362735, 0.86252443]])
>>>np.random.randn(2,3) #不指定种子数,第二次产生(2,3)的数组
Out[6]:
array([[-2.14304926, 0.06838721, 1.0947292 ],
[-0.59087582, 0.4183132 , -0.63660259]])
- numpy.random.seed ( ):用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
>>>import numpy as np
>>>np.random.seed(2018)
>>>np.random.randn(2,3) #使用seed时,第一次产生(2,3)的随机数组
Out[1]:
array([[-0.2767676 , 0.581851 , 2.14839926],
[-1.279487 , 0.50227689, 0.8560293 ]])
>>>np.random.seed(2018)
>>>np.random.randn(2,3) #使用seed时,第二次产生(2,3)的随机数组
Out[2]:
array([[-0.2767676 , 0.581851 , 2.14839926],
[-1.279487 , 0.50227689, 0.8560293 ]])
>>>np.random.randn(2,3) #不使用seed时,第一次产生(2,3)的随机数组
Out[3]:
array([[-0.14279008, 0.11007867, -0.68806479],
[ 0.43356408, 0.510221 , -0.16513097]])
>>>np.random.randn(2,3) #使用seed时,第一次产生(2,3)的随机数组
Out[4]:
array([[-1.35177905, 0.54663075, 1.23065512],
[ 1.0764461 , -1.21062488, -0.30667657]])
参考:
https://blog.csdn.net/ywx1832990/article/details/81455042
https://www.cnblogs.com/twilight77/p/7675512.html
https://www.cnblogs.com/gl1573/p/11043886.html
最后
以上就是愉快发箍为你收集整理的【原创】python基础 --- 随机数、随机小数、随机数列等全解!一、random库生成随机*二、numpy.random库生成随机数组的全部内容,希望文章能够帮你解决【原创】python基础 --- 随机数、随机小数、随机数列等全解!一、random库生成随机*二、numpy.random库生成随机数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复