《机器学习系统设计:Python语言实现》一2.4 NumPy

简介:

.本节书摘来自华章出版社《机器学习系统设计:Python语言实现》一书中的第2章,第2.4节,作者 [美] 戴维·朱利安(David Julian),更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.4 NumPy

我们应该知道Python中表示数据的类型层次。类型层次的根是不可变对象,例如整数、浮点数和布尔。基于这些类型,我们有序列类型。序列类型是有序的对象集合,并且由非负整数进行索引。序列类型是可遍历对象,包括字符串、列表和元组。序列类型有一组共同的操作,例如返回一个元素(s[i])或分片(s[i:j])、求长度(len(s))或求和(sum(s))。最后还有映射类型。映射类型是由一组关键字对象索引的对象集合。映射对象是无序的,并且由数字、字符串或其他对象索引。Python内置的映射类型是字典。
NumPy在这些数据对象的基础之上提供了两类对象:N维数组对象(ndarray)和通用函数对象(ufunc)。ufunc对象为ndarray对象提供了基于元素的操作,允许类型映射和数组广度映射(broadcasting)。类型映射是将数据类型改变为其他类型的过程,也可称为类型转换,广度映射描述了不同大小的数组是如何进行算术运算处理的。NumPy还包括如下子包:线性代数(linalg)、随机数生成器(random)、离散傅里叶变换(fft)和单元测试(testing)。
NumPy使用dtype对象来描述数据的各个方面。这包括诸如浮点数、整数等数据的类型,数据类型的字节数(如果数据是结构化的),以及字段的名字和任意子数组(阵列)的阵形。NumPy还包括如下一些新的数据类型:
8位、16位、32位和64位的整型
16位、32位、64位的浮点数
64位和128位的复数类型
ndarray结构化数组类型
我们可以使用np.cast对象在类型之间进行转换。该对象实际上是一个字典,其键值是目标转换类型,其值是相应的转换函数。如下代码所示,我们可以将整数转换为float32:
image

NumPy数组有多种创建方法,例如由其他Python数据结构转换为数组,使用诸如arange()、ones()和zeros()等内嵌的数组创建对象,或者由.csv或.html文件进行创建。
Indexing和slicingNumPy分别建立于索引和分片技术,并应用于序列。我们应该对序列分片已经很熟悉了,例如对于列表和元组,在Python中使用[i:j:k]语法,其中i是开始索引,j是结束索引,k是步长。NumPy将这种选择元组的概念扩展为N维。
输入如下命令,激活Python控制台:
image

我们可以看到如下输出:
image

其输出是一个3维、4维、5维的多维数组。你应该知道,我们可以通过例如[2,3,4]的表示法来访问数组中的每个元素,[2,3,4]会返回59。数组的索引由0开始。
我们可以使用分片技术返回数组的一个分片。
A[1:2:]得到如下数组:
image

使用(…),我们可以选择保留任意维度的数组元素。例如,a[…,1]等同于a[:,:,1]:
image

我们还可以使用负数从数组末端开始计数:
image

通过分片,我们可以创建数组的视图,而原始数组保持不变,视图持有原始数组的引用。也就是说,创建了分片之后,即使将其分配给一个新的变量,但如果我们改变了原始数组,这些变化也会反映在新的数组变量中。下图进行了举例说明:
image

这里的a和b都引用了同一数组。当我们分配a中的值,也会同时在b中反映。如果不仅仅是引用数组,而是对其进行复制,我们需要使用标准库中copy包的deepcopy()函数。
image

这里,我们创建了一个独立的数组变量c,此时,数组a中的任何变化都不会反映在数组c中。

2.4.1 构造和变换数组

作为构造数组的一种有效手段,NumPy的多个类都使用了分片功能。例如,numpy.mgrid可以用分片来创建meshgrid对象,这在特定情况下比使用arange()更为便利。其主要目的是建立指定维度的N维坐标系数组矩阵。如下图中的例子所示:
image

有时,我们需要以其他方式来操作数据,这包括:
连接:通过使用np.r_和np.c_函数,我们可以使用分片结构连接一个或两个数轴(axis),例如:
image

这里我们使用复数5j作为步长,Python将其解释为填充数轴指定范围内点的数量,这里的范围是-1到1,并包含范围边界值。
newaxis:该对象扩展了数组的维度。
image

上例扩展了数组a的维度,在第一维度增加了额外的数轴。下例则在第二维度增加了新的数轴:
image

我们还可使用布尔运算符进行过滤:
image

对指定数轴进行求和:
image

这里我们指定数轴为2进行了求和。

2.4.2 数学运算

正如所希望的那样,我们可以对NumPy数组运行如加法、减法、乘法,甚至三角函数等数学运算。我们还可以通过广度映射(broadcasting)对不同阵形的数组进行算术运算。当对两个数组进行运算时,NumPy会从尾部维度开始根据元素来比较阵形,如果二者维度相等或其中之一为1,则认为二者兼容,如果不兼容,则会抛出ValueError异常。
运算实际上是由ufunc对象完成的。该对象会对ndarrays的逐个元素进行操作。这些对象本质上是封装器,为标量函数提供了一致的接口,以使其能够对NumPy数组进行操作。NumPy有超过60个ufunc对象,广泛覆盖了各种运算和类型。在运行运算时,ufunc对象是被自动调用的,例如,当对两个数组使用+运算符运行加法运算时,会自动调用相应的ufunc对象。
此外还有一些额外的数学特征如下所述:
向量(Vectors):我们也可以使用np.vectorize()函数创建标量函数的向量化版本。该函数以Python的scalar函数或方法作为参数,输出该函数的向量化版本。
image

我们可以观察到如下输出:
image

多项式函数(Polynomial functions):poly1d类允许我们以一种自然的方式来处理多项式函数。它接受降幂顺序的系数数组为参数。例如,可以按如下方式输入多项式2x2 + 3x + 4:
image

我们可以看到上例中以人类可读方式打印输出了多项式。我们还可以对多项式进行各种运算,例如对给定点进行求值:
image

求根:
image

我们可以使用asarray(p)将多项式系数赋值为一个数组,这样就能在所有接受数组参数的函数中使用了。
正如我们所见,NumPy的这些包为机器学习提供了强大而灵活的框架。

相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
49 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
35 2
|
18天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
33 1
|
18天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
43 1
|
24天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
36 3
|
29天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
32 1
|
2月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
62 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
下一篇
无影云桌面