本书详细介绍Python科学计算中常用的扩展库NumPy、SciPy、matplotlib、Pandas、SymPy、TTK、Mayavi、OpenCV、Cython,涉及数值计算、界面制作、三维可视化、图像处理、提高运算效率等多方面的内容。所附光盘中包含所有章节的Notebook以及便携式运行环境WinPython,以方便读者运行书中所有实例。
1. 使用Python各种扩展库完成数值计算、界面制作、三维可视化、图像处理、提高运算速度等任务
2. 光盘中提供作者本人整合开发的便携式运行环境WinPython,省去读者一一收集Python各个扩展库并安装的麻烦,涵盖NumPy、SciPy、matplotlib、Pandas、SymPy、TVTK、Mayavi、OpenCV、Cython等
3. 文前精美彩插演示书中示例所展现的Python各扩展库的强大处理效果,装帧和排版都十分考究
张若愚,毕业于华中理工大学(现华中科技大学)通信工程专业,2004年获日本姬路工业大学(现兵库县立大学)硕士学位。毕业后于日本神户制钢综合研究所从事研究开发工作至今,研究方向为:嵌入式DSP信号处理系统开发,嵌入式MCU控制系统开发,工业控制软件开发,信号处理、数据处理以及生产系统的计算机模拟。在工作中他积极采用Python作为主要编程语言,在数据处理、信号分析、工业控制、算法模拟等领域取得了较好的研究成果。已完成的研究课题有:嵌入式声音分离系统、车载音响设备、超声波探伤系统、压缩机系统的数字模拟等。
目 录
第1章 Python科学计算环境的安装与简介 1
1.1 Python简介 1
1.1.1 Python 2还是Python 3 1
1.1.2 开发环境 2
1.1.3 集成开发环境(IDE) 5
1.2 IPython Notebook入门 9
1.2.1 基本操作 10
1.2.2 魔法(Magic)命令 12
1.2.3 Notebook的显示系统 20
1.2.4 定制IPython Notebook 24
1.3 扩展库介绍 27
1.3.1 数值计算库 27
1.3.2 符号计算库 28
1.3.3 绘图与可视化 28
1.3.4 数据处理和分析 29
1.3.5 界面设计 30
1.3.6 图像处理和计算机视觉 31
1.3.7 提高运算速度 31
第2章 NumPy-快速处理数据 33
2.1 ndarray对象 33
2.1.1 创建 34
2.1.2 元素类型 35
2.1.3 自动生成数组 37
2.1.4 存取元素 40
2.1.5 多维数组 43
2.1.6 结构数组 47
2.1.7 内存结构 50
2.2 ufunc函数 56
2.2.1 四则运算 58
2.2.2 比较运算和布尔运算 59
2.2.3 自定义ufunc函数 61
2.2.4 广播 62
2.2.5 ufunc的方法 66
2.3 多维数组的下标存取 68
2.3.1 下标对象 68
2.3.2 整数数组作为下标 70
2.3.3 一个复杂的例子 72
2.3.4 布尔数组作为下标 73
2.4 庞大的函数库 74
2.4.1 随机数 74
2.4.2 求和、平均值、方差 77
2.4.3 大小与排序 81
2.4.4 统计函数 86
2.4.5 分段函数 89
2.4.6 操作多维数组 92
2.4.7 多项式函数 96
2.4.8 多项式函数类 98
2.4.9 各种乘积运算 103
2.4.10 广义ufunc函数 106
2.5 实用技巧 110
2.5.1 动态数组 110
2.5.2 和其他对象共享内存 112
2.5.3 与结构数组共享内存 115
第3章 SciPy-数值计算库 117
3.1 常数和特殊函数 117
3.2 拟合与优化-optimize 119
3.2.1 非线性方程组求解 120
3.2.2 最小二乘拟合 121
3.2.3 计算函数局域最小值 125
3.2.4 计算全域最小值 127
3.3 线性代数-linalg 128
3.3.1 解线性方程组 129
3.3.2 最小二乘解 130
3.3.3 特征值和特征向量 132
3.3.4 奇异值分解-SVD 134
3.4 统计-stats 136
3.4.1 连续概率分布 136
3.4.2 离散概率分布 139
3.4.3 核密度估计 140
3.4.4 二项分布、泊松分布、伽玛分布 142
3.4.5 学生t-分布与t检验 147
3.4.6 卡方分布和卡方检验 151
3.5 数值积分-integrate 154
3.5.1 球的体积 154
3.5.2 解常微分方程组 156
3.5.3 ode类 157
3.5.4 信号处理-signal 164
3.5.5 中值滤波 164
3.5.6 滤波器设计 165
3.5.7 连续时间线性系统 167
3.6 插值-interpolate 172
3.6.1 一维插值 172
3.6.2 多维插值 177
3.7 稀疏矩阵-sparse 181
3.7.1 稀疏矩阵的存储形式 182
3.7.2 最短路径 183
3.8 图像处理-ndimage 186
3.8.1 形态学图像处理 187
3.8.2 图像分割 192
3.9 空间算法库-spatial 195
3.9.1 计算最近旁点 195
3.9.2 凸包 199
3.9.3 沃罗诺伊图 201
3.9.4 德劳内三角化 204
第4章 matplotlib-绘制精美的图表 207
4.1 快速绘图 207
4.1.1 使用pyplot模块绘图 207
4.1.2 面向对象方式绘图 210
4.1.3 配置属性 211
4.1.4 绘制多子图 212
4.1.5 配置文件 215
4.1.6 在图表中显示中文 217
4.2 Artist对象 220
4.2.1 Artist的属性 221
4.2.2 Figure容器 223
4.2.3 Axes容器 224
4.2.4 Axis容器 226
4.2.5 Artist对象的关系 230
4.3 坐标变换和注释 231
4.3.1 4种坐标系 234
4.3.2 坐标变换的流水线 236
4.3.3 制作阴影效果 240
4.3.4 添加注释 241
4.4 块、路径和集合 243
4.4.1 Path与Patch 243
4.4.2 集合 245
4.5 绘图函数简介 255
4.5.1 对数坐标图 255
4.5.2 极坐标图 256
4.5.3 柱状图 257
4.5.4 散列图 258
4.5.5 图像 259
4.5.6 等值线图 261
4.5.7 四边形网格 264
4.5.8 三角网格 267
4.5.9 箭头图 269
4.5.10 三维绘图 273
4.6 matplotlib技巧集 274
4.6.1 使用agg后台在图像上绘图 274
4.6.2 响应鼠标与键盘事件 277
4.6.3 动画 285
4.6.4 添加GUI面板 288
第5章 Pandas-方便的数据分析库 291
5.1 Pandas中的数据对象 291
5.1.1 Series对象 291
5.1.2 DataFrame对象 293
5.1.3 Index对象 297
5.1.4 MultiIndex对象 298
5.1.5 常用的函数参数 300
5.1.6 DataFrame的内部结构 301
5.2 下标存取 303
5.2.1 []操作符 304
5.2.2 .loc[]和.iloc[]存取器 304
5.2.3 获取单个值 306
5.2.4 多级标签的存取 306
5.2.5 query()方法 307
5.3 文件的输入输出 307
5.3.1 CSV文件 308
5.3.2 HDF5文件 309
5.3.3 读写数据库 313
5.3.4 使用Pickle序列化 314
5.4 数值运算函数 315
5.5 时间序列 323
5.5.1 时间点、时间段、时间间隔 323
5.5.2 时间序列 326
5.5.3 与NaN相关的函数 329
5.5.4 改变DataFrame的形状 333
5.6 分组运算 338
5.6.1 groupby()方法 339
5.6.2 GroupBy对象 340
5.6.3 分组-运算-合并 341
5.7 数据处理和可视化实例 347
5.7.1 分析Pandas项目的提交历史 347
5.7.2 分析空气质量数据 354
第6章 SymPy-符号运算好帮手 359
6.1 从例子开始 359
6.1.1 封面上的经典公式 359
6.1.2 球体体积 361
6.1.3 数值微分 362
6.2 数学表达式 365
6.2.1 符号 365
6.2.2 数值 367
6.2.3 运算符和函数 368
6.2.4 通配符 371
6.3 符号运算 373
6.3.1 表达式变换和化简 373
6.3.2 方程 376
6.3.3 微分 377
6.3.4 微分方程 378
6.3.5 积分 379
6.4 输出符号表达式 380
6.4.1 lambdify 381
6.4.2 用autowrap()编译表达式 381
6.4.3 使用cse()分步输出表达式 384
6.5 机械运动模拟 385
6.5.1 推导系统的微分方程 386
6.5.2 将符号表达式转换为程序 388
6.5.3 动画演示 389
第7章 Traits & TraitsUI-轻松制作图形界面 393
7.1 Traits类型入门 393
7.1.1 什么是Traits属性 393
7.1.2 Trait属性的功能 396
7.1.3 Trait类型对象 399
7.1.4 Trait的元数据 401
7.2 Trait类型 403
7.2.1 预定义的Trait类型 403
7.2.2 Property属性 406
7.2.3 Trait属性监听 408
7.2.4 Event和Button属性 411
7.2.5 动态添加Trait属性 412
7.3 TraitsUI入门 413
7.3.1 默认界面 414
7.3.2 用View定义界面 415
7.4 用Handler控制界面和模型 425
7.4.1 用Handler处理事件 426
7.4.2 Controller和UIInfo对象 429
7.4.3 响应Trait属性的事件 431
7.5 属性编辑器 432
7.5.1 编辑器演示程序 433
7.5.2 对象编辑器 436
7.5.3 自定义编辑器 440
7.6 函数曲线绘制工具 444
第8章 TVTK与Mayavi-数据的三维可视化 451
8.1 VTK的流水线(Pipeline) 452
8.1.1 显示圆锥 452
8.1.2 用ivtk观察流水线 455
8.2 数据集 461
8.2.1 ImageData 461
8.2.2 RectilinearGrid 466
8.2.3 StructuredGrid 467
8.2.4 PolyData 470
8.3 TVTK的改进 473
8.3.1 TVTK的基本用法 474
8.3.2 Trait属性 475
8.3.3 序列化 476
8.3.4 集合迭代 476
8.3.5 数组操作 477
8.4 TVTK可视化实例 478
8.4.1 切面 479
8.4.2 等值面 484
8.4.3 流线 487
8.4.4 计算圆柱的相贯线 491
8.5 用mlab快速绘图 496
8.5.1 点和线 497
8.5.2 Mayavi的流水线 498
8.5.3 二维图像的可视化 501
8.5.4 网格面mesh 505
8.5.5 修改和创建流水线 508
8.5.6 标量场 511
8.5.7 矢量场 513
8.6 将TVTK和Mayavi嵌入界面 515
8.6.1 TVTK场景的嵌入 516
8.6.2 Mayavi场景的嵌入 518
第9章 OpenCV-图像处理和计算机视觉 523
9.1 图像的输入输出 523
9.1.1 读入并显示图像 523
9.1.2 图像类型 524
9.1.3 图像输出 525
Python科学计算环境的安装与简介
1.1 Python简介
Python是一种解释型、面向对象、动态的高级程序设计语言。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和开发Web系统。目前Python已经成为受欢迎的程序设计语言之一。
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。众多开源的科学计算软件包都提供了Python的调用接口,例如计算机视觉库OpenCV、三维可视化库VTK、复杂网络分析库igraph等。而Python专用的科学计算扩展库就更多了,例如三个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。近年随着数据分析扩展库Pandas、机器学习扩展库scikit-learn以及IPython Notebook交互环境的日益成熟,Python也逐渐成为数据分析领域的挑选工具。
说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱目前还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、更易维护的代码。
● 后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。
1.1.1 Python2还是Python3
自从2008年以来,Python3经历了5个小版本的更迭,无论是语法还是标准库都发展得十分成熟。许多重要的扩展库也已经逐渐同时支持Python2和Python3。但是由于Python3不向下兼容,目前大多数开发者仍然在生产环境中使用Python2.7。在PyCon2014大会上,Python之父宣布Python 2.7的官方支持延长至2020年。因此本书仍然使用Python 2.7作为开发环境。
在本书涉及的扩展库中,IPython、NumPy、SciPy、matplotlib、Pandas、SymPy、Cython、Spyder和OpenCV等都已经支持Python 3,而Traits、TraitsUI、TVTK、Mayavi等扩展库则尚未着手Python 3的移植。虽然一些新兴的三维可视化扩展库正朝着替代Mayavi的方向努力,但目前Python环境中尚未有能替代VTK和Mayavi的专业级别的三维可视化扩展库,因此本书仍保留第1版中相关的章节。
1.1.2 开发环境
和MATLAB等商用软件不同,Python的众多扩展库由许多社区分别维护和,因此要一一将其收集齐全并安装到计算机中是一件十分耗费时间和精力的事情。本节介绍两个科学计算用的Python集成软件包。读者只需要下载并执行一个安装程序,就能安装好本书涉及的所有扩展库。