编辑推荐

  1.使用Python各种扩展库完成数值计算、界面制作、三维可视化、图像处理、提高运算速度等任务
  2.光盘中提供作者本人整合开发的便携式运行环境WinPython,省去读者一一收集Python各个扩展库并安装的麻烦,涵盖NumPy、SciPy、matplotlib、Pandas、SymPy、TVTK、Mayavi、OpenCV、Cython等
  3.文前精美彩插演示书中示例所展现的Python各扩展库的强大处理效果,装帧和排版都十分考究

内容简介

  《Python科学计算(第2版)》详细介绍Python科学计算中常用的扩展库NumPy、SciPy、matplotlib、Pandas、SymPy、TTK、Mayavi、OpenCV、Cython,涉及数值计算、界面制作、三维可视化、图像处理、提高运算效率等多方面的内容。所附光盘中包含所有章节的Notebook以及便携式运行环境WinPython,以方便读者运行书中所有实例。

作者简介

  张若愚,毕业于华中理工大学(现华中科技大学)通信工程专业,2004年获日本姬路工业大学(现兵库县立大学)硕士学位。毕业后于日本神户制钢综合研究所从事研究开发工作至今,研究方向为:嵌入式DSP信号处理系统开发,嵌入式MCU控制系统开发,工业控制软件开发,信号处理、数据处理以及生产系统的计算机模拟。在工作中他积极采用Python作为主要编程语言,在数据处理、信号分析、工业控制、算法模拟等领域取得了较好的研究成果。已完成的研究课题有:嵌入式声音分离系统、车载音响设备、超声波探伤系统、压缩机系统的数字模拟等。

目录

第1章Python科学计算环境的安装与简介1
1.1Python简介1
1.1.1Python2还是Python31
1.1.2开发环境2
1.1.3集成开发环境(IDE)5
1.2IPythonNotebook入门9
1.2.1基本操作10
1.2.2魔法(Magic)命令12
1.2.3Notebook的显示系统20
1.2.4定制IPythonNotebook24
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.1ndarray对象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.2ufunc函数56
2.2.1四则运算58
2.2.2比较运算和布尔运算59
2.2.3自定义ufunc函数61
2.2.4广播62
2.2.5ufunc的方法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拟合与优化-optimize119
3.2.1非线性方程组求解120
3.2.2最小二乘拟合121
3.2.3计算函数局域最小值125
3.2.4计算全域最小值127
3.3线性代数-linalg128
3.3.1解线性方程组129
3.3.2最小二乘解130
3.3.3特征值和特征向量132
3.3.4奇异值分解-SVD134
3.4统计-stats136
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数值积分-integrate154
3.5.1球的体积154
3.5.2解常微分方程组156
3.5.3ode类157
3.5.4信号处理-signal164
3.5.5中值滤波164
3.5.6滤波器设计165
3.5.7连续时间线性系统167
3.6插值-interpolate172
3.6.1一维插值172
3.6.2多维插值177
3.7稀疏矩阵-sparse181
3.7.1稀疏矩阵的存储形式182
3.7.2最短路径183
3.8图像处理-ndimage186
3.8.1形态学图像处理187
3.8.2图像分割192
3.9空间算法库-spatial195
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.2Artist对象220
4.2.1Artist的属性221
4.2.2Figure容器223
4.2.3Axes容器224
4.2.4Axis容器226
4.2.5Artist对象的关系230
4.3坐标变换和注释231
4.3.14种坐标系234
4.3.2坐标变换的流水线236
4.3.3制作阴影效果240
4.3.4添加注释241
4.4块、路径和集合243
4.4.1Path与Patch243
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.6matplotlib技巧集274
4.6.1使用agg后台在图像上绘图274
4.6.2响应鼠标与键盘事件277
4.6.3动画285
4.6.4添加GUI面板288
第5章Pandas-方便的数据分析库291
5.1Pandas中的数据对象291
5.1.1Series对象291
5.1.2DataFrame对象293
5.1.3Index对象297
5.1.4MultiIndex对象298
5.1.5常用的函数参数300
5.1.6DataFrame的内部结构301
5.2下标存取303
5.2.1[]操作符304
5.2.2.loc[]和.iloc[]存取器304
5.2.3获取单个值306
5.2.4多级标签的存取306
5.2.5query()方法307
5.3文件的输入输出307
5.3.1CSV文件308
5.3.2HDF5文件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.1groupby()方法339
5.6.2GroupBy对象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.1lambdify381
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.1Traits类型入门393
7.1.1什么是Traits属性393
7.1.2Trait属性的功能396
7.1.3Trait类型对象399
7.1.4Trait的元数据401
7.2Trait类型403
7.2.1预定义的Trait类型403
7.2.2Property属性406
7.2.3Trait属性监听408
7.2.4Event和Button属性411
7.2.5动态添加Trait属性412
7.3TraitsUI入门413
7.3.1默认界面414
7.3.2用View定义界面415
7.4用Handler控制界面和模型425
7.4.1用Handler处理事件426
7.4.2Controller和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.1VTK的流水线(Pipeline)452
8.1.1显示圆锥452
8.1.2用ivtk观察流水线455
8.2数据集461
8.2.1ImageData461
8.2.2RectilinearGrid466
8.2.3StructuredGrid467
8.2.4PolyData470
8.3TVTK的改进473
8.3.1TVTK的基本用法474
8.3.2Trait属性475
8.3.3序列化476
8.3.4集合迭代476
8.3.5数组操作477
8.4TVTK可视化实例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.2Mayavi的流水线498
8.5.3二维图像的可视化501
8.5.4网格面mesh505
8.5.5修改和创建流水线508
8.5.6标量场511
8.5.7矢量场513
8.6将TVTK和Mayavi嵌入界面515
8.6.1TVTK场景的嵌入516
8.6.2Mayavi场景的嵌入518
第9章OpenCV-图像处理和计算机视觉523
9.1图像的输入输出523
9.1.1读入并显示图像523
9.1.2图像类型524
9.1.3图像输出525
9.1.4字节序列与图像的相互转换526
9.1.5视频输出527
9.1.6视频输入529
9.2图像处理530
9.2.1二维卷积530
9.2.2形态学运算532
9.2.3填充-floodFill534
9.2.4去瑕疵-inpaint536
9.3图像变换537
9.3.1几何变换537
9.3.2重映射-remap540
9.3.3直方图543
9.3.4二维离散傅立叶变换547
9.3.5用双目视觉图像计算深度信息550
9.4图像识别553
9.4.1用霍夫变换检测直线和圆553
9.4.2图像分割558
9.4.3SURF特征匹配561
9.5形状与结构分析564
9.5.1轮廓检测565
9.5.2轮廓匹配568
9.6类型转换569
9.6.1分析cv2的源程序570
9.6.2Mat对象572
9.3.3在cv和cv2之间转换图像对象574
第10章Cython-编译Python程序575
10.1配置编译器575
10.2Cython入门577
10.2.1计算矢量集的距离矩阵577
10.2.2将Cython程序编译成扩展模块579
10.2.3C语言中的Python对象类型581
10.2.4使用cdef关键字声明变量类型582
10.2.5使用def定义函数585
10.2.6使用cdef定义C语言函数586
10.3高效处理数组587
10.3.1Cython的内存视图587
10.3.2用降采样提高绘图速度592
10.4使用Python标准对象和API596
10.4.1操作list对象596
10.4.2创建tuple对象597
10.4.3用array.array作为动态数组598
10.5扩展类型600
10.5.1扩展类型的基本结构600
10.5.2一维浮点数向量类型601
10.5.3包装ahocorasick库606
10.6Cython技巧集612
10.6.1创建ufunc函数613
10.6.2快速调用DLL中的函数617
10.6.3调用BLAS函数620
第11章实例627
11.1使用泊松混合合成图像627
11.1.1泊松混合算法627
11.1.2编写代码629
11.1.3演示程序632
11.2经典力学模拟632
11.2.1悬链线633
11.2.2最速降线638
11.2.3单摆模拟641
11.3推荐算法644
11.3.1读入数据645
11.3.2推荐性能评价标准646
11.3.3矩阵分解647
11.3.4使用最小二乘法实现矩阵分解648
11.3.5使用Cython迭代实现矩阵分解651
11.4频域信号处理654
11.4.1FFT知识复习654
11.4.2合成时域信号657
11.4.3观察信号的频谱660
11.4.4卷积运算671
11.5布尔可满足性问题求解器675
11.5.1用Cython包装PicoSAT678
11.5.2数独游戏682
11.5.3扫雷游戏686
11.6分形693
11.6.1Mandelbrot集合693
11.6.2迭代函数系统699
11.6.3L-System分形706
11.6.4分形山脉710

精彩书摘

  Python科学计算环境的安装与简介
  1.1Python简介
  Python是一种解释型、面向对象、动态的高级程序设计语言。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和开发Web系统。目前Python已经成为最受欢迎的程序设计语言之一。
  由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程。众多开源的科学计算软件包都提供了Python的调用接口,例如计算机视觉库OpenCV、三维可视化库VTK、复杂网络分析库igraph等。而Python专用的科学计算扩展库就更多了,例如三个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。近年随着数据分析扩展库Pandas、机器学习扩展库scikit-learn以及IPythonNotebook交互环境的日益成熟,Python也逐渐成为数据分析领域的首选工具。
  说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱目前还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
  ●首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。
  ●其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、更易维护的代码。
  ●最后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。
  1.1.1Python2还是Python3
  自从2008年发布以来,Python3经历了5个小版本的更迭,无论是语法还是标准库都发展得十分成熟。许多重要的扩展库也已经逐渐同时支持Python2和Python3。但是由于Python3不向下兼容,目前大多数开发者仍然在生产环境中使用Python2.7。在PyCon2014大会上,Python之父宣布Python2.7的官方支持延长至2020年。因此《Python科学计算(第2版)(附光盘)》仍然使用Python2.7作为开发环境。
  在《Python科学计算(第2版)(附光盘)》涉及的扩展库中,IPython、NumPy、SciPy、matplotlib、Pandas、SymPy、Cython、Spyder和OpenCV等都已经支持Python3,而Traits、TraitsUI、TVTK、Mayavi等扩展库则尚未着手Python3的移植。虽然一些新兴的三维可视化扩展库正朝着替代Mayavi的方向努力,但目前Python环境中尚未有能替代VTK和Mayavi的专业级别的三维可视化扩展库,因此《Python科学计算(第2版)(附光盘)》仍保留第1版中相关的章节。
  1.1.2开发环境
  和MATLAB等商用软件不同,Python的众多扩展库由许多社区分别维护和发布,因此要一一将其收集齐全并安装到计算机中是一件十分耗费时间和精力的事情。本节介绍两个科学计算用的Python集成软件包。读者只需要下载并执行一个安装程序,就能安装好《Python科学计算(第2版)(附光盘)》涉及的所有扩展库。
  ……

前言/序言

  第1版序
  Python理所当然地被视为一门通用的程序设计语言,非常适合于网站开发、系统管理以及通用的业务应用程序。它为诸如YouTube这样的网站系统、RedHat操作系统中不可或缺的安装工具以及从云管理到投资银行等大型企业的IT系统提供技术支持,从而赢得了如此高的声誉。Python还在科学计算领域建立了牢固的基础,覆盖了从石油勘探的地震数据处理到量子物理等范围广泛的应用场景。Python这种广泛的适用性在于,这些看似不同的应用领域通常在某些重要的方面是重叠的。易于与数据库连接、在网络上发布信息并高效地进行复杂计算的应用程序对于许多行业是至关重要的,而Python最主要的长处就在于它能让开发者迅速地创建这样的工具。
  实际上,Python与科学计算的关系源远流长。吉多?范罗苏姆创建这门语言,还是在他在荷兰阿姆斯特丹的国家数学和计算机科学研究学会(CWI)的时候。当时只是作为“课余”的开发,但是很快其他人也开始为之做出贡献。从1994年开始的头几次Python研讨会,都是在大洋彼岸的科研机构举行的。例如国家标准技术研究所(NIST)、美国地质学会以及劳伦斯利福摩尔国家实验室(LLNL),所有这些都是以科研为中心的机构。当时Python1.0刚刚发布,与会者们就已经开始打造Python的数学计算工具。10多年过去了,我们欣喜地看到,我们在开发具有惊人能力的工具集以及建设多彩的社区方面做出了如此多的成绩。很合时宜的是,就我所知的第一本涵盖了Python的主要科学计算工具的综合性著作,在另一个海洋之遥的中国编著并出版了。展望今后的十几年,我迫不及待地想看到我们能共同创建出怎样的未来。
  吉多他本人并不是科学家或工程师。他在CWI的计算机科学部门时,为了缓解为阿米巴(Amoeba)操作系统创建系统管理工具的痛苦,他创建了Python。当时那些系统管理工具都是用C语言编写的。于是Python就成了填补shell脚本和C语言之间空白的工具。操作系统工具与计算逆矩阵或快速傅立叶变换是完全不同的领域,但是从Python诞生开始,世界各地的许多科学家就成了它最早期的采用者。吉多成功地创建了一门能与他们的C和Fortran代码完美结合的、具有优雅表现力的程序语言。并且,吉多是一位愿意听取建议并添加关键功能的语言设计师,例如支持复数就是专门针对科学领域的。随着NumPy的前身——Numeric的诞生,Python获得了一个高效且强大的数值运算工具,它巩固了在未来几十年中,Python作为领先的科学计算语言的地位。
  对于一些人来说,“科学计算编程”会让人联想起NumericalRecipesinC中描述的那些复杂算法,或是研究生们在深夜中努力打造程序的场景。但是真实情况所涵盖的范围更广泛——从底层的算法设计到具有高级绘图功能的用户界面开发。而后者的重要性却常常被忽视了。幸运的是在《Python科学计算(第2版)(附光盘)》中,作者为我们介绍了科学计算编程所需的各个方面。从NumPy库和SciPy算法工具库的基础开始,介绍了任何科学计算应用程序所需的基本工具。然后,《Python科学计算(第2版)(附光盘)》很恰当地介绍了二维绘图以及三维可视化库——matplotlib、Chaco、Mayavi。用Traits和TraitsUI进行应用程序和界面开发,以及用Cython、Weave、ctypes和SWIG等与传统的C语言库相互结合等内容在书中也有很好的介绍。除了这些核心的工具之外,《Python科学计算(第2版)(附光盘)》还介绍了使用SymPy进行数学符号运算以及其他的各种有用的主题。
  所有这些主题都被汇编到一《Python科学计算(第2版)(附光盘)》中真是一件令人欣喜的事情。《Python科学计算(第2版)(附光盘)》所提供的一站式服务,能够指导读者从最初的入门直到创建一个漂亮的、全功能的分析与模拟应用程序。
  EricJones
  2011年12月8日
  关于序言作者
  EricJones是Enthought公司的CEO,他在工程和软件开发领域拥有广泛的背景,指导Enthought公司的产品工程和软件设计。在共同创建Enthought公司之前,他在杜克大学电机工程学系从事数值电磁学以及遗传优化算法方面的研究,并获得了该系的硕士和博士学位。他教授过许多用Python做科学计算的课程,并且是Python软件基金会的成员。
  关于Enthought公司
  Enthought是一家位于美国得克萨斯州首府奥斯汀的软件公司,主要使用Python从事科学计算工具的开发。《Python科学计算(第2版)(附光盘)》中介绍的NumPy、SciPy、Traits、TraitsUI、Chaco、TVTK以及Mayavi均为该公司开发或维护的开源程序库。
  前 言
  Python世界的发展日新月异,在《Python科学计算(第2版)(附光盘)》第1版出版之后,Python在数据分析、科学计算领域又出现了许多令人兴奋的进展:
  ●IPython从增强的交互式解释器发展到JupyterNotebook项目,它已经成为Python科学计算界的标准配置。
  ●Pandas经过几个版本的更新,目前已经成为数据清洗、处理和分析的不二选择。
  ●OpenCV官方的扩展库cv2已经正式发布,它的众多图像处理函数能直接对NumPy数组进行处理,编写图像处理、计算机视觉程序变得更方便、简洁。
  ●matplotlib2.0即将发布,它将使用更美观的默认样式。
  ●Cython内置支持NumPy数组,它已经逐渐成为编写高效运算扩展库的首选工具。
  ●NumPy、SciPy等也经历了几个版本的更新,许多计算变得更快捷,功能也更加丰富。
  ●WinPython、Anaconda等新兴的Python集成环境无须安装,使得开发与共享Python程序更方便快捷。
  《Python科学计算(第2版)(附光盘)》第2版紧随各个扩展库的发展,将最新、最实用的内容呈现给读者。除了数值计算之外,《Python科学计算(第2版)(附光盘)》还包含了界面制作、三维可视化、图像处理、提高运算效率等方面的内容。最后一章综合使用《Python科学计算(第2版)(附光盘)》介绍的各个扩展库,完成几个有趣的实例项目。
  《Python科学计算(第2版)(附光盘)》完全采用IPythonNotebook编写,保证了书中所有代码及输出的正确性。附盘中附带所有章节的Notebook以及便携式运行环境WinPython,以方便读者运行书中所有实例。
  《Python科学计算(第2版)(附光盘)》适合于工科高年级本科生、研究生、工程技术人员以及计算机开发人员阅读,也适合阅读过第1版的读者了解各个扩展库的最新进展,进一步深入学习。
  阅读《Python科学计算(第2版)(附光盘)》的读者需要掌握Python语言的一些基础知识,Cython章节需要读者能够阅读C语言代码。
  除封面署名的作者外,参加《Python科学计算(第2版)(附光盘)》编写的人员还有张佑林、张东等人,在此一并表示感谢。

其他推荐