公众号后台回复“图书“,了解更多号主新书内容
作者:黄伟呢
来源:数据分析与统计学之美
1. 本文介绍
前面我为大家讲述了Numpy中数组元素的底层存储。
今天黄同学就为大家介绍一个重要的内容:9种生成随机数的函数!
2. 哪9个函数呢?
咱们先一睹为快吧,在正式讲述之前,我先给大家罗列出来。
① np.random.random:生成指定形状的0-1之间的随机数;
② np.random.rand:生成指定形状的0-1之间的随机数;
③ np.random.randint:生成指定数值范围内的随机整数;
④ np.random.randn:生成服从均值为0,标准差为1的标准正态分布随机数;
⑤ np.random.normal:生成指定均值和标准差的正态分布随机数;
⑥ np.random.uniform:生成均匀分布随机数;
⑦ np.random.seed:按照种子来生成随机数,种子一样,生成的随机数也一样;
⑧ np.random.shuffle:打乱数组元素顺序;
⑨ np.random.choice:按照指定概率从指定数组中,随机抽出某个数;
对于上述每个函数,接下来,我将分别为大家讲述。
① 生成指定形状的0-1之间的随机数:np.random.random()和np.random.rand()
array1 = np.random.random((3))
print(array1)
array2 = np.random.random((3,4))
print(array2)
# -----------------------------------
array3 = np.random.rand(3)
print(array3)
array4 = np.random.rand(2,3)
print(array4)
结果如下:
但是呢,这两种函数我们经常容易写错,比如下面这种写法:
array5 = np.random.random(3,4)
print(array5)
array6 = np.random.rand((2,3))
print(array6)
结果如下:
所以,大家应该注意它们的区别:
② 生成指定数值范围内的随机整数:np.random.randint()
先给大家介绍这个函数的语法和参数含义:
语法:np.random.randint(low=, high=1, size=, dtype=)
low和high表示指定范围的最大值和最小值。
size既可以体现生成数组的元素个数,又可以体现生成数组的维数,当size等于某个数x的时候,代表生成的是一维数组,数组元素个数为x;当size等于某个元组(x,y)的时候,代表生成的是二维数组,数组元素个数为x * y,其中x表示行数,y表示列数。当然size=(x,y,z)的时候,生成的就是一个三维数组。
dtype表示你可以指定生成数组的数据类型,注意此函数生成的是整数,因此这里你只能指定是np.int32或np.int64,肯定不能写成float。
array7 = np.random.randint(low=1, high=10, size=6, dtype=np.int32)
print(array7)
array8 = np.random.randint(low=1, high=10, size=(2,3), dtype=np.int64)
print(array8)
array9 = np.random.randint(low=1, high=10, size=(2,3,4), dtype=np.int32)
print(array9)
结果如下:
③ 与正态分布有关的几个随机函数:np.random.randn()和np.random.normal()
np.random.randn:生成服从均值为0,标准差为1的标准正态分布随机数;
np.random.normal :生成指定均值和标准差的正态分布随机数;
array10 = np.random.randn(3)
print(array10)
array11 = np.random.randn(2,3)
print(array11)
array12 = np.random.normal(loc=2,scale=0.5,size=6)
print(array12)
array13 = np.random.normal(loc=2,scale=0.5,size=6).reshape(2,3)
print(array13)
结果如下:
关于上述两个函数,这里有如下知识点要介绍:
④ 均匀分布随机函数:np.random.uniform()
用法:生成指定范围内的服从均匀分布的随机数;
array14 = np.random.uniform(1,10,5)
print(array14)
array15 = np.random.uniform(1,10,(2,3))
print(array15)
结果如下:
⑤ np.random.seed():按照种子来生成随机数,种子一样,则生成的随机数结果必一致
该函数可以传入任意一个整数值,作为一颗种子。你就把这个整数值想象成一可桃树种子,当然这棵种子得到的结果肯定是桃树,当你要再生成一棵桃树,你肯定还要设置相同的整数值作为桃树种子,这样长出来的才会是一样的桃树。
类比产生随机数数组,也是同样的道理,当你设置了一个随机种子,那么会产生一个随机数组。如果你要生成相同的随机数组,就必须设置相同的随机种子,这样最终产生的随机数组才会是一样。
当你不传入任何数字的时候,代表默认传入的是系统的默认事件,每一刻传入的值都是不一样的。
当函数中,传入同一个随机种子,会产生相同的随机数。
np.random.seed(3)
a = np.random.rand(3)
print(a)
np.random.seed(3)
b = np.random.rand(3)
print(b)
结果如下:
当你不传入任何数字的时候,系统会随机传入不同的值,此时产生的随机数,就不一定相同了。
np.random.seed()
a = np.random.rand(3)
print(a)
np.random.seed()
b = np.random.rand(3)
print(b)
结果如下:
⑥ np.random.shuffle():打乱数组元素顺序(原地操作数组)
c = np.arange(10)
print(c)
np.random.shuffle(c)
print(c)
结果如下:
⑦ np.random.choice():按照指定概率从指定数组中,生成随机数
d = np.random.choice([1,2,3,4], p=[0.1, 0.2, 0.3, 0.4])
print(d)
结果如下:
这个函数的含义:上述函数第一个参数表示的是数组,第二个参数表示的是概率值。上述函数的含义是当进行n多次重复实验的时候,抽取1的概率为0.1,抽取2的概率为0.2,抽取3的概率为0.3,抽取4的概率为0.4。
案例一:随即进行10000次重复实验,检测每一个数,被抽取到的概率;
list1 = [0,0,0,0]
for i in range(100000):
f = np.random.choice([1,2,3,4], p=[0.1, 0.2, 0.3, 0.4])
list1[f-1] = list1[f-1] + 1
print(list1)
result_list = [value/sum(list1) for value in list1]
print(result_list)
结果如下:
案例二:模拟进行100000次掷硬币重复实验,检测每一面,被抽取到的概率;
list1 = [0,0]
for i in range(100000):
f = np.random.choice([0,1], p=[0.5,0.5])
list1[f] = list1[f] + 1
print(list1)
result_list = [value/sum(list1) for value in list1]
print(result_list)
结果如下:
◆ ◆ ◆ ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗