![Python数据预处理技术与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/321/27563321/b_27563321.jpg)
2.1 NumPy
NumPy是Python语言常用的科学计算工具包,本节主要介绍NumPy的安装和特点以及NumPy的数组、NumPy的数学函数、NumPy的线性代数和NumPy IO操作等内置模块(源代码见:Chapter2/NumpyDome.py)。
2.1.1 NumPy的安装和特点
NumPy(官网:http://www.numpy.org/,如图2-1所示),是Python语言的一个扩展程序库它支持大量的维度数组与矩阵运算,此外也提供大量的数学函数库。NumPy的前身Numeric最早是由Jim Hugunin与其他协作者共同开发,2005年,Travis Oliphant在Numeric中结合了另一个同性质的程序库Numarray的特色,并加入了其他扩展而开发了NumPy。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P29_5029.jpg?sign=1739498589-uS6lD6wJyBz0hVJ9pPLUiTnRR2CkJTsX-0-4dcb273885bae670494a9186b445e555)
图2-1 NumPy官网
1. NumPy的安装
方法一 Anaconda已经集成了NumPy,读者在DOS环境下查看:conda list
方法二 读者可以通过pip自动安装,执行如下命令:pip install numpy
方法三 读者在GitHub上下载NumPy源码(https://github.com/numpy/numpy),然后在源码根目录下执行如下命令:python setup.py install
安装完成后,检测是否成功。首先启动Sublime,然后按F6键进入Python环境,最后输入import numpy,得到以下状态即表示安装成功。如图2-2所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P29_5040.jpg?sign=1739498589-GTSaWkLDyEIYslTBdgVg7GUnxIniQZ7k-0-da80c7ce4881c1abed17113633310ef7)
图2-2 验证NumPy是否安装成功
2. NumPy的特点
NumPy参考了CPython(一个使用字节码的解释器),但在CPython解释器上所写的数学算法代码通常远比编译过的相同代码要慢。为了解决这个难题,NumPy引入了多维数组以及可以直接有效率地操作多维数组的函数与运算符。在NumPy上只要能被表示为针对数组或矩阵运算的算法,其运行效率几乎都可以与编译过的等效C语言代码一样快。
NumPy通常与SciPy(Scientific Python)和Matplotlib(绘图库)一起使用,这种组合广泛用于替代MatLab,是一个强大的科学计算环境,有助于我们通过Python学习数据科学或者机器学习。
2.1.2 NumPy数组
数组操作是NumPy的主要模块之一,这里主要介绍一维数组、多维数组、数组基本运算、常数数组、数值范围创建数组、切片和索引以及数组的其他相关操作的实现。
1. 创建一维数组
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P30_38630.jpg?sign=1739498589-gXAmD2Kb81jDP30cw2VQGpLul3J8hUuA-0-f483c10b6e2aaa428cde30872cdc1153)
运行结果:
[1 2 3]
2. 创建多维数组
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P30_38633.jpg?sign=1739498589-ajAyW5LIX6wmiEoMoae3PA4KmtOpDKvM-0-e41337282f4280e05ec7f76ebcca5154)
运行结果:
[[1 2] [3 4] [5 6]]
3. 数组基本运算
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P30_38636.jpg?sign=1739498589-LmXtLeGOdVH03nXmK4fb0IkUFR86syky-0-319b0eaceae2ce3a9c57f0a940607363)
运行结果:
数组的维数:2 数组元素总个数:6 元素类型:int32
4. 创建常数数组
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P31_38644.jpg?sign=1739498589-owgpJcyeIuIZqTOCGT7yvdneHV6iAPId-0-ef6a556187140cebb155dd49cb0c6a4e)
代码说明:
- dtype:表示数据类型,省略时默认为浮点数据类型。
- order:有C和F两个选项,分别代表行优先和列优先。
运行结果:
创建0数组:[[0. 0. 0.] [0. 0. 0.]] 创建1数组:[[1. 1. 1.] [1. 1. 1.]]
5. 使用数值范围创建数组
创建从1开始到10终止,步长为2的浮点型数组。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P31_38638.jpg?sign=1739498589-vrs0mHsU4qKOxRY4LjiqNEaoZYd2VAhp-0-d75867849609dd74ae0f51c387cf09ac)
运行结果:
[1. 3. 5. 7. 9.]
6. 切片和索引
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P31_38637.jpg?sign=1739498589-0pwWefobKZJabb6Sg2AxdXTu4bNo7wAS-0-6fcdadc616293f17d8d34b99c92347f3)
运行结果:
[ 1 4 7 10 13 16 19] [ 2 4 6 8 10 12]
7. 数组操作的其他方法
NumPy数组的其他操作方法包括数组排序、数组逆序、最大最小值差、矩阵百分比、统计中位数、算术平均值、加权平均值、标准差、方差等,其操作也比较简单,这里不再逐一示例,请参考表2-1自行实现。
表2-1 NumPy数组的其他方法
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T32_38648.jpg?sign=1739498589-S7DABciP3efiWscpZnJkGnjlyWzyJvzi-0-9a54035da1e2ae1bf26d1cff18e2ac87)
2.1.3 Numpy的数学函数
1. 三角函数
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P32_38649.jpg?sign=1739498589-ZFSqNzAgTW6zqgA2LGimEYFDR36n5LpN-0-e2dcef242f5a6fe209b7d6d56cd7161a)
运行结果:
[0. 0.70710678 1. ]
2. 三角函数操作的其他方法
三角函数的操作方法包括正弦、余弦、正切、反正弦、反余弦、反正切等,实现方法与上述代码类同,请参考表2-2自行使用。
表2-2 三角函数的操作方法
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T33_38652.jpg?sign=1739498589-VcwKu83vwuFy8yKvJvLhFWf9vwVJvUCK-0-e9f46e6de6bf540867b7729359001cb3)
3. 矩阵运算
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P33_38653.jpg?sign=1739498589-fas07HhFM5bEyI5JINAOn2wI9ioxRkgY-0-c5474b8cf1fa963bb1e3b769f8773a0a)
运行结果:
第一个数组:[[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]] 第二个数组:[10 10 10] 两个数组之和:[[10. 11. 12.] [13. 14. 15.] [16. 17. 18.]]
4. 矩阵运算的其他方法
矩阵运算在数据预处理中的使用频率非常高,涉及的方法有相加、相减、相乘等,限于篇幅不能逐一举例,读者可以参加表2-3自行使用。
表2-3 矩阵运算的其他方法
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T33_38654.jpg?sign=1739498589-5s54Iwous590Kx1Kzz0NKxhcW0bTX6Tl-0-62dcd15e5ed1a3285bd40db3c4328c15)
2.1.4 NumPy线性代数运算
1. 点积
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P34_38655.jpg?sign=1739498589-Ch89hB3ocehZEalOjdElhKCxYpSTB9zS-0-dc428a5cb7bcad1055de8a734027a92a)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P34_5980.jpg?sign=1739498589-pIDdyiDqeiAn23vGDhf7l6CoXASXjOS8-0-79eab018f6af0df8549e7ef8f3aa2424)
2. 线性代数操作的其他方法
线性代数运算也是比较重要的知识,NumPy使用频率也较高,具体函数如表2-4所示,读者可参照上述代码自行使用。
表2-4 线性代数操作的其他方法
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T34_38656.jpg?sign=1739498589-xK9wH4PDY99Tx8B9UqqjJKU0XlF0EqtM-0-382142d3c25165b3c5816e8eaa6959af)
2.1.5 NumPy IO操作
NumPy为ndarray对象引入了一个简单的文件格式npy,npy文件用于存储重建ndarray所需的数据、图形、dtype和其他信息。
1. 数组保存为npy文件
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P34_38657.jpg?sign=1739498589-59QbYmiuq9duqnFf23tHPaJh5zrp10gv-0-735456a9441840435ced280300cd103d)
运行结果:
[[17. 23.] [39. 53.]]
2. 数组保存为txt文件
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P35_38661.jpg?sign=1739498589-C5cmFHIt4LAWNhshOSrmPxHCN3ZzaNYR-0-75fe870d1f21dc07bb4a5e4e4007caf0)
运行结果:
[[17. 23.] [39. 53.]]