上例中,数组a的数据类型为int64,如果使用的是32位Python,则得到的数据类型可能是int32。
2. 数组属性
NumPy数组有一个重要的属性——维度(dimension),它的维度被称作秩(rank)。以二维数组为例,一个二维数组相当于两个一维数组。只看最外面一层,它相当于一个一维数组,该一维数组中的每个元素也是一维数组。那么,这个一维数组即二维数组的轴。
了解了以上概念,接着来看NumPy数组中比较重要的ndarray对象的属性:
- ndarray.ndim:秩,即轴的数量或维度的数量
- ndarray.shape:数组的维度,如果存的是矩阵,如n×m矩阵则输出为n行m列
- ndarray.size:数组元素的总个数,相当于.shape中n×m的值
- ndarray.dtype:ndarray对象的元素类型
- ndarray.itemsize:ndarray对象中每个元素的大小,以字节为单位
- ndarray.flags:ndarray对象的内存信息
- ndarray.real:ndarray元素的实部
- ndarray.imag:ndarray元素的虚部
- ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
02 Matplotlib
Matplotlib是Python数据分析中常用的一个绘图库,常用来绘制各种数据的可视化效果图。其中,matplotlib.pyplot包含了简单的绘图功能。
1. 实战:绘制多项式函数
为了说明绘图的原理,下面来绘制多项式函数的图像。使用NumPy的多项式函数poly1d()来创建多项式。
多项式函数的绘制结果如图2-13所示。
▲图2-13 多项式函数绘制
2. 实战:绘制正弦和余弦值
为了明显看到两个效果图的区别,可以将两个效果图放到一张图中显示。Matplotlib中的subplot()函数允许在一张图中显示多张子图。subplot()常用的3个整型参数分别为子图的行数、子图的列数以及子图的索引。
下面的实例将绘制正弦和余弦两个函数的图像。
正弦和余弦函数的绘制结果如图2-14所示。
▲图2-14 正弦和余弦函数绘制
03 PySpark
在大数据应用场景中,当我们面对海量的数据和复杂模型巨大的计算需求时,单机的环境已经难以承载,需要用到分布式计算环境来完成机器学习任务。
Apache Spark是一个快速而强大的框架,可以对弹性数据集执行大规模分布式处理。通过图2-15所示的Apache Spark架构图可以非常清晰地看到它的组成。
▲图2-15 Apache Spark架构图
Spark支持丰富的数据源,可以契合绝大部分大数据应用场景,同时,通过Spark核心对计算资源统一调度,由于计算的数据都在内存中存储,使得计算效率大大提高。Spark原生支持的语言是Scala,但为了丰富应用场景和满足各研发人员的语言偏好,Spark同时支持Java、Python与R。
PySpark是Spark社区发布的在Spark框架中支持Python的工具包,它的计算速度和能力与Scala相似。通过PySpark调用Spark的API,配合MLlib与ML库,可以轻松进行分布式数据挖掘。
MLlib库是Spark传统的机器学习库,目前支持4种常见的机器学习问题:分类、回归、聚类和协同过滤。MLlib的所有算法皆基于Spark特有的RDD(Resilient Distributed Dataset,弹性分布式数据集)数据结构进行运算。由于RDD并不能很好地满足更为复杂的建模需求,ML库应运而生。
ML库相较MLlib库更新,它全面采用基于数据帧(Data Frame)的API进行操作,能够提供更为全面的机器学习算法,且支持静态类型分析,可以在编程过程中及时发现错误,而不需要等代码运行。
Python中除了包含上面介绍的库,还有其他一些常用库。下面分别进行介绍。
04 SciPy
SciPy是一个开源算法库和数学工具包,它基于NumPy构建,并扩展了NumPy的功能。SciPy包含线性代数、积分、插值、特殊函数、快速傅里叶变换等常用函数,功能与软件MATLAB、Scilab和GNU Octave类似。Scipy常常结合Numpy使用,可以说Python的大多数机器学习库都依赖于这两个模块。
05 Pandas
Pandas提供了强大的数据读写功能、高级的数据结构和各种分析工具。该库的一大特点是能用一两个命令完成复杂的数据操作。
Pandas中最基础的数据结构是Series,用于表示一行数据,可以理解为一维的数组。另一个关键的数据结构为DataFrame,用于表示二维数组,作用和R语言里的data.frame很像。
Pandas内置了很多函数,用于分组、过滤和组合数据,这些函数的执行速度都很快。Pandas对于时间序列数据有一套独特的分析机制,可对时间数据做灵活的分析与管理。
06 Scikit-Learn
Scikit-Learn是一个基于NumPy、SciPy、Matplotlib的开源机器学习工具包,功能强大,使用简单,是Kaggle选手经常使用的学习库。它主要涵盖分类、回归和聚类算法,例如SVM、逻辑回归、朴素贝叶斯、随机森林、K均值以及数据降维处理算法等,官方文档齐全,更新及时。
Scikit-Learn基于Numpy和SciPy等Python数值计算库,提供了高效的算法实现,并针对所有算法提供了一致的接口调用规则,包括KNN、K均值、PCA等,接口易用。
07 TensorFlow
TensorFlow是谷歌开源的数值计算框架,也是目前最为流行的神经网络分析系统。它采用数据流图的方式,可灵活搭建多种机器学习和深度学习模型。
08 Keras
Keras是一个用于处理神经网络的高级库,可以运行在TensorFlow和Theano上,现在发布的新版本可以使用CNTK或MxNet作为后端。Keras简化了很多特定任务,并大大减少了样板代码数,目前主要用于深度学习领域。
高中强,人工智能与大数据领域技术专家,有非常深厚的积累,擅长机器学习和自然语言处理,尤其是深度学习,熟悉Tensorflow、PyTorch等深度学习开发框架。曾获“2019年全国大学生数学建模优秀命题人奖”。参与钟南山院士指导新型冠状病毒人工智能预测系统研发项目,与钟南山院士团队共同发表学术论文。《linux就该这么学》不错的linux自学书籍