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



公众号后台回复“图书“,了解更多号主新书内容
     作者:黄伟呢
     来源:数据分析与统计学之美

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站也能学编程吗
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值