概述
python自带的有random模块,而numpy中也有random的相关功能,因此为了不造成混淆,在载入random模块的时候我们可以给它起一个别名:import random as rndimport numpy as np
接下来我们按照功能的逻辑作为顺序,对比着来分析python自带的random模块,和numpy模块中的random之间的异同:生成0-9之间的一个随机整数:rnd0 = np.random.randint(10)rnd1 = rnd.randint(0, 9) rnd2 = rnd.randrange(9)rnd3 = rnd.randrange(0, 9, 1)
rnd.randint(m, n)的取值范围是[m, n],可生成m-n之间的整数,必须传入左右区间两个参数,只给一个参数会报错。
rnd.randrange(n)方法可以生成一个0-n上的随机整数。可以只传入一个参数为右区间即生成[0, n)之间的随机整数,也可以传入三个参数:左区间,右区间,步长。
而numpy中的 np.random.randint(n)的取值范围是[0, n)。
随机取5-9之间的三个整数:rnd2 = np.random.randint(5, 10, 3)rnd3 = np.random.randint(5, 10, (1, 3))
产生一个多维的数据,python自带的random模块是做不到的。因此我们要选用np.random.randint方法,它需要传入三个数据,左区间,右区间,以及一个描述形状的数值或元组。
rnd2是一个np.array数组。rnd2和rnd3之间的区别是rnd2产生的是一个三维列向量,而rnd3产生的是一个三维行向量。
我们也可以注意到,np.random产生的多维随机数都是np.array类型的,而自带的random模块的多位随机数都是list类型的。
生成一个0-1的随机浮点数:rnd4 = rnd.random()rnd5 = np.random.rand()rnd6 = rnd.uniform(0, 1)rnd7 = np.random.uniform(0, 1)
自带的random模块不需要任何参数,np.random.rand方法也不需要任何参数。而numpy中的random.uniform需要给定区间,rnd.uniform方法也需要设定区间范围。
生成一个1-9的随机浮点数:rnd8 = np.random.uniform(9)#rnd8 = np.random.uniform(1)rnd9 = np.random.rand(1, 9)rnd10 = rnd.uniform(1, 9)
np.random.uniform默认的左区间为1,只需给uniform一个参数9即可生成1-9之间的浮点数。因为默认左区间的存在,因此rnd8能且仅能产生一个1.0的浮点数。
rnd.uniform(m, n)可生成m-n之间的浮点数,必须传入左右区间两个参数,只给一个参数会报错。
生成一个2*3的数组,里面装着6个0-1之间的浮点数:pythonrnd7 = np.random.uniform(0, 1, (2, 3))rnd8 = np.random.random_sample((2, 3))
上面的两种说法等价,np.random.random_sample可以生成0-1之间的浮点数,只需给出一个描述生成的数组形状的tuple格式的数据。
而np.random.uniform方法需要传入三个数据,左区间,右区间,以及一个描述形状的元组.
生成一个符合高斯分布的随机数,和一个符合正态分布的随机数:rnd = rnd.gauss(1, .2)rnd = rnd.normalvariate(1, 0.2)
将返回一个符合要求的浮点数,其中两个参数一个是mu,另一个是sigma。
随机选择可迭代对象的6个元素(可重复选择),如果可能的话,将它们排列成2*3的矩阵:str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]rnd = np.random.choice(list1, 6)rnd = np.random.choice(list1, (2, 3))#rnd = np.random.choice(str1, 6)rnd = rnd.choices(list1, 6)rnd = rnd.choices(str1, 6)rnd = rnd.sample(str1, 6)
np.random.choice方法可以从列表中挑选n个元素(最好是数字),然后依据传入的第二个参数进行排列组合,如果是个tuple就将tuple内的数据作为维数。
记住,自带的random模块中的方法,除了sample,和choices能返回多个随机数外,其他的都只能返回一个随机数。但凡自带的random模块返回的多个数据,格式都是list。但凡np.random中的方法返回的多个数据都是np.array类型的,而且默认的是一维列向量。
而numpy作为一个数据处理的模块,他的np.random.choice方法无法处理字符串。而rnd.choice方法的参数只要是Iterable的即可,可以是str,也可以是list。
对数据进行原地随机排列:list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]list2 = ['Spring', 'Breeze', 'Ten', 'Miles']arr1 = np.arange(16).reshape(4, 4) #生成一个4*4的矩阵tuple1 = tuple(list1)frozenset1 = frozenset(list1)np.random.shuffle(list1)np.random.shuffle(arr1)rnd.shuffle(list1)#rnd.shuffle(tuple1)#rnd.shuffle(frozenset1)
对于可变的数据类型,比如list,而对于静态不可变的数据,比如str, frozenset, tuple等,都不能使用shuffle方法。
而numpy中的np.random.shuffle方法不仅可以处理list,还能对np.array类型的数据进行重新排列,但是要注意的是,只能打乱矩阵的行的次序,而保持每一行中的数据的相对位置。
对数据进行原地随机排列,并且不改变原来数据:rnd = rnd.sample(tuple1, len(tuple1))rnd = rnd.sample(frozenset1, len(frozenset1))rnd = np.random.permutation(list2)arr = np.random.permutation(arr1)
自带的rnd.sample方法可以对静态的数据进行重排,返回一个列表。原理是从可迭代对象中挑选出(不重复的)k个对象进行重拍。返回排列之后的列表,而不改变原来的数据。
np.random.permutation是专门进行打乱顺序的函数,与np.random.shuffle方法对应。
我们可以从中体会到numpy与众不同的地方!
多维数组即为矩阵!生成随机数的时候可以指定数组的形状,而python自带的列表,即使是多维列表也不能按照矩阵来理解,当然也就不能像矩阵一样指定形状!
numpy主要用来进行数据计算,而不擅长处理字符串,需要对字符串进行操作最好还是选用python自带的方法或函数。
举个小例子,生成一个由A-Z, a-z, 或0-9组成的四位验证码:vericode = ''for i in range(4): rnd_veri = rnd.randint(0, 2) if rnd_veri == 0: vericode += str(rnd.randint(0, 9)) elif rnd_veri == 1: vericode += chr(rnd.randint(65, 90)) elif rnd_veri == 2: vericode += chr(rnd.randint(97, 122))
利用chr函数将ascii码转换成一个字符(串),(65, 90)是大写的A-Z,(97, 122)是小写的a-z。字符串之间可以用+将进行连接,要把vericode初始化为str类型,但不放入内容。
最后
以上就是魔幻溪流为你收集整理的对python random模块的认识_Python常用模块之random的全部内容,希望文章能够帮你解决对python random模块的认识_Python常用模块之random所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复