推荐序
在科研探索与工程实践的广阔领域中,Python早已成为无可争议的“瑞士军刀”——它凭借功能全面、模块丰富、灵活度高和扩展性强等一系列突出优势,几乎能够满足各类科学与工程计算任务的多样化需求。无论是开展高精度的数值模拟、完成复杂多变的符号运算,还是构建逻辑严密的统计模型,Python始终展现出卓越的适应性与高效的处理性能,赢得了全球科研人员、工程师以及技术开发者的高度认可与广泛应用。
本书正是围绕Python科学计算生态系统所精心编撰、享誉全球的经典教材,长期被众多高等院校、顶尖研究机构及一线技术团队奉为权威参考书与核心教学蓝本。此次推出的第3版堪称一次全面而深入的升级,由长期深耕于科研计算前沿、具备深厚理论功底与丰富实践经验的译者担纲翻译。新版内容不仅与时俱进,系统且详尽地涵盖了NumPy、Pandas、SciPy、Matplotlib等核心工具库的最新功能与行业最佳实践,还深入剖析了利用Numba和Cython实现高性能代码优化、使用FEniCS高效求解偏微分方程等兼具前沿性与实用价值的技术主题。
译者依托其扎实的学科基础、多年的工程实践经验与严谨认真的翻译态度,最大程度地保障了术语的精确性、技术表述的专业性,以及整体行文的流畅性与可读性,真正实现了“信、达、雅”的完美统一。他的译介工作不仅精准传递了原书的技术精髓与思想脉络,还紧密结合国内科研环境与工程实际,进一步增强了内容的适用性和可操作性。
无论读者是刚刚踏入科研之门的高校学生,还是致力于提升数值计算与算法实现效能的一线工程师或专业研究人员,这本内容全面、讲解深入、案例丰富的科学计算指南,都将成为你在学习、研究,乃至日常工作中不可或缺的案头宝典和实战利器。本书能够帮助读者在数据处理、算法设计、模型构建及性能优化等关键方面实现实质性突破,从而在面对日益复杂且多样化的科学与工程计算任务时,更加得心应手、游刃有余。
宋天龙(Tony Song)
资深数据分析专家
触脉咨询合伙人、副总裁
译者序
在数据科学与计算科学深度融合的当下,Python凭借其简洁的语法、丰富的开源库生态,以及跨平台的特性,已然成为科学计算与数据分析领域的主流工具,从高校的科研教学到工业界的实际应用,都能看到Python的身影。本书作为该领域的经典教材,自问世以来便以系统的知识体系、贴合实战的内容编排深受全球读者认可,如今第3版的推出,更是在第2版的基础上完成了全面的升级与优化。
对比本书第2版,第3版在保留核心知识框架的前提下,紧跟Python生态的最新发展趋势,完成了内容的迭代、深化与融合,从目录的调整与内容的编排中便能清晰地看到这些变化:其一,计算环境与核心库的内容同步升级,对IPython、Jupyter(QtConsole/Notebook/Lab)、Spyder等科学计算常用环境的讲解适配了最新版本的特性,同时对NumPy、SciPy、Pandas等核心库的知识点进行了细节优化,补充了新版本中实用的函数与方法,让读者所学内容能直接适配当下的实际应用场景。其二,知识编排的逻辑更趋连贯,对符号计算、绘图可视化、方程求解、偏微分方程等经典科学计算章节的子节进行了重新梳理,删减了冗余内容,强化了知识点之间的衔接;而机器学习、贝叶斯统计、信号处理等偏应用的章节,则深化了实战性内容,让理论知识能更好地落地。其三,科学计算与数据分析的融合更为紧密,第3版将Pandas数据处理、Seaborn可视化、时间序列分析、统计建模等数据分析核心内容,与传统的数值计算、符号计算、微分方程求解等科学计算内容深度融合,形成了“计算为基、分析为用”的完整知识体系,契合当下跨领域的技术需求。
本书的知识体系层层递进、逻辑清晰,全书共19章,形成了从基础到进阶、从理论到实战的完整学习路径。开篇从Python科学计算的基础环境入手,让读者掌握IPython、Jupyter、Spyder的核心使用技巧。随后讲解NumPy多维数组、SymPy符号计算、Matplotlib可视化等基础工具,为后续的计算与分析打下坚实基础。接着,深入讲解方程求解、优化、插值、积分、常微分方程与偏微分方程求解等经典科学计算问题,满足理工科科研与工程的核心计算需求。而后,过渡到Pandas数据处理、统计分析、统计建模等数据分析内容,再延伸至机器学习、贝叶斯统计、信号处理等进阶应用。最后,讲解数据的输入/输出与代码优化(Numba、Cython),让读者不仅能“会算、会分析”,还能“算得高效、用得便捷”。各章末的小结与扩展阅读,更是能帮助读者梳理知识重点、拓展学习边界。
本书的适用人群极为广泛,既可作为高校数学、物理、工程学、计算机科学、统计学等理工科专业的Python科学计算/数据分析课程教材,也可作为科研院所研究人员、工业界工程师与数据分析师的实用参考手册。无论是零基础想要入门Python科学计算与数据分析的读者,还是有一定基础、希望进阶提升并对接前沿技术的从业者,都能从本书中找到适合自己的学习内容。
由于译者水平有限,译文中难免存在疏漏、欠妥之处,恳请广大读者在阅读过程中批评指正,我将虚心接受并不断完善,也希望这本译著能真正成为大家学习Python科学计算与数据分析的得力助手。
译者
作者简介
Robert Johansson是一位经验丰富的Python程序员兼计算科学家,他拥有瑞典查尔姆斯理工大学理论物理学博士学位。他在学术界和工业界从事科学计算工作已逾15年,既参与过开源项目的开发,也做过专有性研究项目的开发。在开源领域,他为QuTip项目作出了很多贡献,QuTip项目是一个用于模拟量子系统动力学的流行Python框架,他还为科学计算领域的其他几个Python库作出过贡献。Robert对科学计算和软件开发充满热情,并热衷于传授和交流这方面的最佳实践方法,以便能在这些领域取得最好的成果:新颖的、可重现的、可扩展的且有影响力的计算结果。
技术审校者简介
Shovon Sengupta是一位杰出的数据科学专家,擅长在高级预测分析、机器学习、深度学习和强化学习领域耕耘。作为美国富达投资(Fidelity Investment)人工智能卓越中心的首席数据科学家,Shovon站在推动创新计划的前沿,这些计划利用人工智能(尤其是生成式AI)解决复杂的商业难题。Shovon拥有一项使用强化学习实现自动预测呼叫路由的美国专利。
Shovon还在机器学习领域编写了几门课程。他也曾在各种关于机器学习、时间序列预测和构建可信人工智能等主题的国际会议上发表演讲。他的主要研究集中在深度强化学习、深度学习、自然语言处理、知识图谱、因果关系分析和时间序列分析方面。
Shovon还是一名专注于将机器学习算法应用于金融领域的博士。他的主要研究兴趣包括深度强化学习、自然语言处理、知识图谱、因果关系分析和时间序列分析。他对推动数据科学领域发展的执着,体现在他对知识和创新的不断追求上。
前 言
科学计算和数值计算是科研、工程和数据分析领域的新兴方向。过去几十年来,计算机行业的变革为其从业者提供了前所未有的强大工具。这让计算工作能够处理以往难以实现的大规模且复杂的任务,所以整个领域和行业的应用如雨后春笋般涌现。这种进步还在持续,随着硬件、软件和算法的不断改进,该领域也正在创造新的机会。虽然这种技术进步的终极推手是最近几十年以来出现的拥有强大计算能力的硬件,但对于计算从业人员来说,开展计算工作的软件环境与硬件一样重要,甚至更为重要。本书介绍目前很流行且快速发展的数值计算环境:由Python编程语言及其很多库组成的数值计算生态。
计算是一项跨学科的工作,需要在理论和实践方面都有丰富的专业知识和经验:扎实的数学基础和科学思维是计算工作的基本要求。另外,计算机编程和计算机科学方面的训练也同样重要。本书的目的就是通过使用Python编程语言及相关的计算环境进行科学计算来结合理论和实践。本书假设读者已经接受过一些数学和数值方法的基本训练,并且掌握Python编程的基础知识。本书的重点是使用Python进行实际计算问题的求解。每章都会对该章涉及的理论知识做简单介绍,主要是为了向读者介绍相关的符号并回顾基本的方法和算法。但本书并非自成体系的数值方法教材。为了帮助那些对本书某些章介绍的主题不太熟悉的读者,每章在最后都会给出扩展阅读。另外,如果读者缺乏Python编程经验,将本书与专门介绍Python编程语言的书一起阅读会很有用。
本书的组织方式
本书第1章介绍科学计算的一般原理以及使用Python进行科学计算的主要开发环境,重点介绍IPython及其交互式Python命令行,还介绍优秀的Jupyter Notebook应用以及Spyder IDE。
第2章介绍NumPy库。另外,还将讨论基于数组的计算及其优点。在第3章,我们关注使用SymPy库进行符号计算,符号计算在很多方面都是对基于数组的计算的补充。在第4章,我们介绍使用Matplotlib库进行绘图和可视化。这三章为我们提供了基本的计算工具:数值计算、符号计算与可视化。
第5章的主题是方程求解,分别介绍如何使用SciPy和SymPy库的数值方法和符号方法。在第6章,我们探讨优化问题,这是方程求解的自然延伸。我们主要使用SciPy库,同时也会简单地使用cvxopt库。第7章主要介绍插值,这是另外一种广泛应用的基本数学工具,在高级算法和方法中有着重要的作用。第8章介绍数值积分和符号积分。第5~8章主要介绍在所有计算工作中经常使用的核心计算技术,这几章的大部分方法都可以在SciPy库中找到。
第9章介绍常微分方程。第10章介绍稀疏矩阵和图论相关的方法,为下一章的内容做铺垫。第11章讨论偏微分方程,这类方程虽然在概念上与常微分方程密切相关,但是需要使用不同的技术,需要用到第10章介绍的稀疏矩阵。
从第12章开始,我们的研究方向转到数据分析和统计分析。在第12章,我们介绍Pandas库及其优秀的数据分析框架。第13章介绍基本的统计分析以及SciPy stats包中的相关方法。第14章介绍使用statsmodels库进行统计建模。第15章将结合机器学习(使用scikit-learn库)继续讨论统计分析和数据分析。第16章是介绍统计分析的最后一章,讨论贝叶斯统计和PyMC库。第12~16章介绍统计分析和数据分析这一广阔领域,近年来在Python科学计算社区内外,该领域都发展迅速。
第17章简要回顾科学计算的另外一个核心领域:信号处理。第18章讨论数据的输入与输出,以及多种读写数值数据到文件的方法,这是大部分计算工作所必需的基本工具。第19章介绍加速Python代码的两种方法:使用Numba和Cython库。
附录介绍本书中所用软件的安装方法。我们可以使用conda包管理器来安装所需的软件(大部分是Python库)。conda包管理器也可用来创建虚拟且独立的Python环境,这对于创建稳定和可复制的计算环境非常重要。附录还讨论了如何使用conda包管理器来管理这类环境。
源代码与彩图下载
本书的每章都配有对应的Jupyter Notebook,其中包含该章中的所有源代码。这些Notebook及其代码运行所需的数据文件都可以从https://github.com/Apress/Numerical- Python-3rd-ed下载,读者也可以通过扫描本书封底的二维码下载。
本书配套彩色图片以电子版形式在线提供,读者可扫描封底二维码下载。
