凌云时刻 · 技术
导读:NumPy是Python中的一个类库,它支持高阶维度数组(矩阵)的创建及各种操作、运算,是我们在机器学习中经常会使用的一个类库。这一节再看一些NumPy的矩阵用法。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
numpy.random
NumPy也提供了生成随机数和随机元素数组的方法,我们来看一下:
|
如果我们希望每次使用随机方法生成的结果都是一样的,一般调试时候有这个需求,此时NumPy的random()方法也提供了方便简单的方式,既随机种子的概念:
|
指定均值和标准差生成随机数数组或矩阵
我们先来看看均值、方差、标准差的概念。均值很好理解,就是所有样本数据的平均值,描述了样本集合的中间点:
方差是衡量样本点和样本期望值相差的度量值:
标准差描述的是样本集合的各个样本点到均值的距离之平均:
标准差也就是对方差开根号。举个例子,[0, 8, 12, 20]和[8, 9, 11, 12],两个集合的均值都是10,但显然两个集合的差别是很大的,计算两者的标准差,前者是8.3后者是1.8,显然后者较为集中,标准差描述的就是这种散布度或者叫做波动大小。综上,方差的意义在于描述随机变量稳定与波动、集中与分散的状况。标准差则体现随机变量取值与其期望值的偏差。
NumPy也提供了指定均值和标准差生成随机数的方法,我们来看一下:
|
查看数组维度
|
numpy.array的数据访问
|
切片
Python中,有一个获取数组片段非常方便的方法,叫做切片,numpy.array中同样支持切片,我们来看一下:
|
一般将高维矩阵降为低维矩阵其实也是使用切片来处理:
|
另外需要注意的是通过切片获取NumPy的数组或者矩阵的子数组,子矩阵是通过引用方式的,而Python中的数组通过切片获取的子数组是拷贝方式的。NumPy主要是考虑到性能效率问题。我们来看一下:
|
改变数组维度
NumPy也提供了修改数组维度的方法,我们来看看:
|
数组合并操作
NumPy也提供两个数组合并的操作:
|
多维数组也支持合并:
|
上面的示例都是同维度的数组进行合并,那么不同维度的数组如何合并呢,我们来看一下:
|
其实NumPy提供了更智能的不同维度数组合并的方法,我们来看一下:
|
数组分割操作
有合并自然就会有分割,我们来看看NumPy提供的分割方法:
|
和合并一样,分割也有更快接的方法:
|
矩阵运算
NumPy中提供了完整的矩阵的运算,我们从加减法来看一下:
|
下面我们再来看看数乘:
|
我们再来看看矩阵的转置:
|
聚合操作
NumPy中有很多对数组的聚合操作方法,我们先来看看一维数组:
|
我们再来看看矩阵的聚合操作:
|
索引和排序的相关操作
NumPy提供了一系列对数组索引操作的方法,我们来看一下:
|
我们再来看看排序:
|
NumPy的Fancy Indexing
一般情况下我们访问NumPy数组的数据,可以使用索引,甚至可以用步长来取:
|
但是有时候我们需要取数组中没有什么规律的元素,比如元素之间步长不等的,这就需要用到NumPy提供的Fancy Indexing机制来获取了:
|
除了使用指定索引以外,我们还可以使用布尔数组或者矩阵来使用Fancy Indexing,我们来看一下:
|
Matplotlib
在Python中,除了有NumPy这种对数组操作的类库,还有一个类一个在机器学习中使用比较广泛的类库是Matplotlib,这是一个绘制二维图像的类库,我们来看一下:
|
|
|
|
|
|
|
|
|
以上都是利用matplotlib画折线图,下面来看看如何画散点图:
|
|
|
|
基于Scikit Learn的数据探索
Scikit-learn是Python语言中专门针对机器学习应用而发展起来的一款开源框架,其中有一个模块叫Datasets,它提供了机器学习的一些常用的数据集以及产生数据集的方法,比如波士顿房价数据集、乳腺癌数据集、糖尿病数据集、手写字体数据集、鸢尾花数据集等等。这一小节我们就通过Scikit Learn的Datasets来初步对机器学习的数据进行探索。
我们使用NumPy和Matplotlib对Scikit Learn Datasets中的鸢尾花这个数据集进行探索:
|
从上面的示例可以看到鸢尾花这个字典一共包含五种信息,我们逐一来看看这五种信息:
|
DESCR详细的描述了鸢尾花这个数据集一共有150组数据,每组数据有4个特征,分别是萼片的长度和厚度、花瓣的长度和厚度,还有3种鸢尾花的类别以及这些数据的统计信息和详细的解释说明。
|
可以看到data中的数据就是萼片长度、厚度,花瓣长度、厚度的值。是一个150行,4列的矩阵。
|
