首页 文章详情

Numpy中,生成随机数的9种函数,你知道哪几种?

数据森麟 | 420 2021-06-23 19:59 0 0 0
UniSMS (合一短信)


公众号后台回复“图书“,了解更多号主新书内容

     作者:黄伟呢

     来源:数据分析与统计学之美

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=)
  • lowhigh表示指定范围的最大值和最小值。
  • 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站也能学编程吗

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter