本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis
根据《Python for Data Analysis 3rd Edition》翻译整理
—————-————————————-
1.numpy.random模块
Numpy中的random模块可以很方便地生成多种概率分布下的数组。
numpy.random模块相对python内建的random模块更为高效(Python 的内置random模块一次只取一个值),因此,通过下面代码可以看到,在生成非常大的样本时两者所花费时间相差一个数量级。
Python 的内置随机模块一次只取一个值。正如你从这个基准中看到的,numpy.random在生成非常大的样本时,其速度远远超过一个数量级。
1>>> %timeit [normalvariate(0,1) for _ in range(1_000_000)]
2840 ms ± 10.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
3
4>>> %timeit np.random.standard_normal(size=1_000_000)
526.8 ms ± 369 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
TIPS:
%time: 在行模式下,代码运行一次所花费的时间。
%%time:在单元模式下,代码运行一次所花费的时间。
%timeit: 在行模式下,执行代码块若干次,取最佳结果。
%%timeit: 在单元模式下,执行代码块若干次,取最佳结果。
行模式:只对紧跟其后的代码进行测试。
单元模式:用于代码块的测试。
2.随机数生成器(Random Number Generator)
numpy.random模块生成的随机数被称为伪随机数,是由一个可配置的随机数生成器生成的。
在上面的代码中,numpy.random.standard_normal()函数使用了numpy.random模块中的默认随机数生成器。但是,在代码中也可以显式地配置生成器。
-
首先需要先创建一个随机数生成器(Random Number Generator);
-
然后再使用生成器(Generator)的函数方法生成随机数。
其中,seed参数决定了生成器的初始状态,每次使用rng对象生成数据时,其状态都会发生变化。
1>>> rng = np.random.default_rng(seed=123)
2
3>>> rng.standard_normal(size=3)
4array([-0.98912135, -0.36778665, 1.28792526])
3.随机数生成函数:
numpy.random模块中主要的随机数生成函数如下:
函数 |
说明 |
permutation() | 返回一个序列的随机排列,或者返回一个乱序的整数范围序列 |
shuffle() | 随机排列一个序列 |
rand() | 服从[0,1)均匀分布的随机样本值 |
randint(low,high,size,dtype) | 根据给定值,从低到高抽取随机整数 |
randn() | 从均值为0方差为1的正态分布中抽取样本 |
normal(loc,scale,size) | 从正态高斯分布中抽取样本 |
uniform(low,high,size) | 从均匀[low,high) 分布总抽取样本 |
binomial(n,p,size) | 从二项分布中抽取样本 |
beta(a,b,size) | 从beta分布中抽取样本 |
chisquare(df,size) | 从卡方分布中抽取样本 |
gamma(shape, scale, size) | 从伽马分布中抽取样本 |
-
permutation()、shuffle():
TIPS:
np.random.shuffle():在原数组上进行,改变自身序列,无返回值。np.random.permutation():不在原数组上进行,返回新的数组,不改变自身数组。
1>>> arr = np.arange(12).reshape(3,4)
2>>> arr
3array([[ 0, 1, 2, 3],
4 [ 4, 5, 6, 7],
5 [ 8, 9, 10, 11]])
6
7>>> np.random.permutation(np.arange(10))
8array([4, 0, 7, 5, 8, 3, 1, 6, 9, 2])
9>>> arr
10array([[ 0, 1, 2, 3],
11 [ 4, 5, 6, 7],
12 [ 8, 9, 10, 11]])
1>>> arr = np.arange(12).reshape(3,4)
2>>> arr
3array([[ 0, 1, 2, 3],
4 [ 4, 5, 6, 7],
5 [ 8, 9, 10, 11]])
6
7>>> np.random.shuffle(arr)
8>>> arr
9array([[ 8, 9, 10, 11],
10 [ 0, 1, 2, 3],
11 [ 4, 5, 6, 7]])
-
rand()、randint()、randn()、normal()、uniform():
1>>> np.random.rand(2,3,4)
2array([[[0.46023842, 0.19317033, 0.2936925 , 0.81792751],
3 [0.55948738, 0.67792545, 0.80912668, 0.86857215],
4 [0.41799246, 0.05893816, 0.478459 , 0.52115943]],
5
6 [[0.58063202, 0.309199 , 0.91988263, 0.6553475 ],
7 [0.34924138, 0.54109404, 0.4490534 , 0.28232096],
8 [0.29587653, 0.56348098, 0.71519128, 0.51761868]]])
9
10>>> np.random.randint(low=1,high=100,size=(2,3) , dtype=np.uint8)
11array([[76, 32, 91],
12 [11, 4, 76]], dtype=uint8)
13
14>>> np.random.randn(2,3)
15array([[-0.73521696, 0.50124899, 1.01273905],
16 [ 0.27874086, -1.37094847, -0.33247528]])
17
18>>> np.random.normal(loc=1,scale=10,size=(2,3))
19array([[ 20.59411342, -19.25045763, -1.75786014],
20 [ -4.52108071, 2.20747363, 8.48215617]])
21
22>>> np.random.uniform(low=1,high=5,size=(2,3))
23array([[2.82964799, 4.01410396, 3.96744861],
24 [1.19431613, 3.83478958, 4.35697339]])
-
binomial()、beta()、chisquare()、gamma():
1>>> np.random.binomial(n=20 ,p=0.5 , size=(2,3))
2array([[ 8, 12, 9],
3 [ 9, 11, 7]])
4
5>>> np.random.beta(10,20,(2,3))
6array([[0.36655283, 0.45592941, 0.40079304],
7 [0.28977561, 0.33336553, 0.32160162]])
8
9>>> np.random.chisquare(df=2, size=(2, 3))
10array([[0.44978892, 3.33884668, 1.26217687],
11 [3.29987627, 0.01490818, 1.60410673]])
12
13>>> np.random.gamma(shape=3,scale=20,size=(2,3))
14array([[ 57.83147668, 79.80850879, 120.17752795],
15 [ 24.96820389, 25.88570086, 50.9173336 ]])
本篇文章来源于微信公众号: 码农设计师