描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111633907
译者序
第2版前言
第1版前言
第1章 导论1
1.1 科学计算软件1
1.2 本书的规划3
1.3 Python能与编译语言竞争吗7
1.4 本书的局限性8
1.5 安装Python和附加软件包8
第2章 IPython入门9
2.1 Tab键代码自动补全功能9
2.2 自省9
2.3 历史命令11
2.4 魔法命令11
2.5 IPython实践:扩展示例13
2.5.1 使用IPython终端的工作流程14
2.5.2 使用IPython笔记本的工作流程14
第3章 Python简明教程18
3.1 输入Python代码18
3.2 对象和标识符19
3.3 数值类型20
3.3.1 整型20
3.3.2 实数21
3.3.3 布尔值22
3.3.4 复数23
3.4 名称空间和模块23
3.5 容器对象25
3.5.1 列表25
3.5.2 列表索引26
3.5.3 列表切片26
3.5.4 列表的可变性27
3.5.5 元组28
3.5.6 字符串29
3.5.7 字典29
3.6 Python的if语句30
3.7 循环结构31
3.7.1 Python的for循环结构31
3.7.2 Python的continue语句32
3.7.3 Python的break语句33
3.7.4 列表解析33
3.7.5 Python的while循环34
3.8 函数35
3.8.1 语法和作用范围35
3.8.2 位置参数38
3.8.3 关键字参数38
3.8.4 可变数量的位置参数38
3.8.5 可变数量的关键字参数39
3.8.6 Python的输入/输出函数39
3.8.7 Python的print函数40
3.8.8 匿名函数42
3.9 Python类简介42
3.10 Python程序结构44
3.11 素数:实用示例45
第4章 NumPy49
4.1 一维数组50
4.1.1 初始构造函数51
4.1.2 “相似”构造函数52
4.1.3 向量的算术运算52
4.1.4 通用函数54
4.1.5 向量的逻辑运算符55
4.2 二维数组58
4.2.1 广播58
4.2.2 初始构造函数59
4.2.3 “相似”构造函数61
4.2.4 数组的运算和通用函数61
4.3 多维数组62
4.4 内部输入和输出62
4.4.1 分散的输出和输入62
4.4.2 NumPy文本文件的输出和输入64
4.4.3 NumPy二进制文件的输出和输入65
4.5 外部输入和输出65
4.5.1 小规模数据65
4.5.2 大规模数据66
4.6 其他通用函数66
4.6.1 最大值和最小值66
4.6.2 求和与乘积67
4.6.3 简单统计67
4.7 多项式67
4.7.1 根据数据求多项式系数68
4.7.2 根据多项式系数求数据68
4.7.3 系数形式的多项式运算68
4.8 线性代数68
4.8.1 矩阵的基本运算68
4.8.2 矩阵的特殊运算70
4.8.3 求解线性方程组71
4.9 有关NumPy的更多内容和进一步学习71
4.9.1 SciPy71
4.9.2 SciKits72
第5章 二维图形73
5.1 概述73
5.2 绘图入门:简单图形74
5.2.1 前端74
5.2.2 后端74
5.2.3 一个简单示例图形75
5.2.4 交互式操作77
5.3 面向对象的Matplotlib77
5.4 笛卡儿坐标绘图78
5.4.1 Matplotlib绘图函数78
5.4.2 曲线样式79
5.4.3 标记样式79
5.4.4 坐标轴、网格线、标签和标题80
5.4.5 一个稍复杂的示例:傅里叶级数的部分和81
5.5 极坐标绘图82
5.6 误差条83
5.7 文本与注释84
5.8 显示数学公式84
5.8.1 非LaTeX用户85
5.8.2 LaTeX用户86
5.8.3 LaTeX用户的替代方案86
5.9 等高线图87
5.10 复合图形89
5.10.1 多个图形89
5.10.2 多个绘图90
5.11 曼德尔布罗特集:实用示例91
第6章 多维图形96
6.1 概述96
6.2 降维到二维96
6.3 可视化软件97
6.4 可视化任务示例97
6.5 孤立波的可视化98
6.5.1 交互式操作任务98
6.5.2 动画任务100
6.5.3 电影任务101
6.6 三维对象的可视化102
6.7 三维曲线103
6.7.1 使用mplot3d可视化曲线103
6.7.2 使用mlab可视化曲线105
6.8 简单曲面106
6.8.1 使用mplot3d可视化简单曲面106
6.8.2 使用mlab可视化简单曲面108
6.9 参数化定义的曲面109
6.9.1 使用mplot3d可视化Enneper曲面109
6.9.2 使用mlab可视化Enneper曲面110
6.10 居里叶集的三维可视化111
第7章 SymPy:一个计算机代数系统113
7.1 计算机代数系统113
7.2 符号和函数114
7.3 Python和SymPy之间的转换116
7.4 矩阵和向量117
7.5 一些初等微积分118
7.5.1 微分118
7.5.2 积分118
7.5.3 级数与极限119
7.6 等式、符号等式和化简120
7.7 方程求解121
7.7.1 单变量方程122
7.7.2 具有多个自变量的线性方程组122
7.7.3 更一般的方程组124
7.8 常微分方程的求解125
7.9 在SymPy中绘图127
第8章 常微分方程132
8.1 初值问题132
8.2 基本思想132
8.3 odeint函数135
8.3.1 理论背景135
8.3.2 谐波振荡器136
8.3.3 范德波尔振荡器139
8.3.4 洛伦兹方程140
8.4 两点边值问题142
8.4.1 概述142
8.4.2 边值问题的公式化143
8.4.3 简单示例144
8.4.4 线性特征值问题145
8.4.5 非线性边值问题147
8.5 延迟微分方程151
8.5.1 模型方程151
8.5.2 更一般的方程及其数值解152
8.5.3 逻辑斯谛方程153
8.5.4 麦克-格拉斯方程155
8.6 随机微分方程157
8.6.1 维纳过程158
8.6.2 It?微积分158
8.6.3 It?与斯特拉托诺维奇随机积分162
8.6.4 随机微分方程的数值求解162
第9章 偏微分方程:伪谱方法169
9.1 初边值
Python for Scientists, Second Edition
第1版的前言中包含了本书的写作动机,以及对众多协助编写本书的工作人员的致谢。在此,我还要感谢许多读者,他们提供了建设性的批评意见,其中大部分已经被纳入第2版中。我还想进一步解释一下为什么要出版第2版。从表面上看,除了新增讨论SymPy(Python本身的计算机代数系统)的第7章之外,似乎没有什么大的变化。
然而,新版本中的大部分内容都渗透着一种根本性的变化。在准备第1版时,使用增强解释器IPython的可靠方法是通过传统的“终端模式”。那时正在开发增强的“笔记本模式”,该模式与Mathematica笔记本概念类似,区别在于其显示在计算机的默认Web浏览器中。该项目现在已经演变为Jupyter笔记本,该笔记本允许人们构建和发布包含计算机代码(支持40多种语言)、数学公式、说明文本、图形图像和可视化内容的文档。由于这也许是初学者获得Python经验的最简单的软件应用程序,因此本书的大部分内容已经为笔记本用户重写了教学内容。特别是第2版的附录A中还包含了一个关于如何使用笔记本的启发式教程,并且已经扩展式地重写了第2章的内容以展示其特性。书中的所有内容现在都给出了适当的应用实例。例如,允许SymPy生成其他计算机代数系统无法比拟的代数表达式。
这种变化也影响了交互式图形和视觉动画领域。之所以有这种变化的需求,是因为标准Python的二维图形包Matplotlib难以生成与平台无关的结果。实际上,由于“改进”的软件升级,第1版中用于即时屏幕动画的代码不再有效。然而,笔记本的概念则提供了一个微妙的解决方案来破解这一僵局。回想一下,笔记本窗口是浏览器窗口,它使用现代HTML图形。第6章介绍了笔记本概念所带来的益处。
最后一处改进是,除了本书中列出的最普通的代码片段之外,所有代码片段现在都以电子文档形式提供(当然采用笔记本文件格式),而网站中则同时包括HTML和PDF版本,具体参见1.2节。电子文档中不包括代码前后的说明文本。为了读取代码说明文本,读者必须阅读本书(无论是纸质版还是电子格式)!
编者按:John在第2版完成后不久就不幸去世了,他的同事、朋友和家人都非常想念他,尤其是他的“Python寡妇”。
第1版前言
Python for Scientists, Second Edition
我借助计算机从事科学研究已有40多年了。在这期间,计算机硬件越来越便宜、越来越快速,并且越来越强大。然而,与科技工作者相关的软件则变得越来越复杂。我最喜欢的关于Fortran90和C++的教科书分别是1200页和1600页。同时我们还需要阅读关于数学库和图形包的文档。对于想沿着这条路走下去的新手,将不得不投入大量的时间和精力,以便写出有用的程序。这导致了“科学计算软件包”的出现,比如Matlab?或Mathematica?,它们避免了编译语言、独立数学库和图形包的复杂性。我一直在使用这些科学计算软件包,发现它们可以非常方便地用于执行开发人员所设想的任务。然而,我也发现它们很难再扩展,因此我需要寻找其他方法。
若干年前,一位计算机科学领域的同事建议我研究一下Python。那时,Python就已经具有很大的潜力了,但其实现却非常脆弱。然而,正因为其免费且开源,所以一直吸引着一支非常有效的开发队伍。最近,他们努力的成果得到了协调和统一,从而形成了一个强大的软件包,该软件包由一种小型的核心语言和许多外围附加库或者模块组成。其中一组可以而且确实复制了传统科学计算包的功能。更重要的是,如果能够熟练并睿智地使用Python及其模块,就完全可以实现通常由Fortran、C等专业程序员胜任的大项目。虽然运行速度略有损失,但可以由大大缩短的开发时间来超额补偿。本书的目的就是向科技工作者介绍如何利用这种相对未知的资源。
大多数科学家对计算机都有一定的熟悉程度和编程意识(尽管不一定熟悉Python),我将充分考虑这种因素。因此,与大多数旨在“教”一门语言的书籍不同,本书不仅仅是讨论参考手册中的内容。Python具有很多强大但不为人知的方面,相对于那些广为人知的内容,这些方面需要更多的解释。特别是,如果在本书中遇到“初学者”或者“粗心大意”的词句,那么表示在说明文档中没有明确指出的关键点,至少作者本人在该点上犯了错误。
本书的前七章以及附录A,涵盖了科技工作者为开始有效地使用Python而需要知道的几乎所有知识。本书的编辑和一些评阅专家建议我在后半部分专注于讨论某一领域的问题。但这可能会导致一系列书籍的产生,“面向生物化学家的Python”“面向晶体学家的Python”等,而且所有这些教科书的前半部分内容都相同。我选择只涉及三个主题,但是本书的内容也适用于许多更广泛的领域。第8章涵盖四种截然不同的常微分方程,并且展示了如何使用各种相关的“黑盒”,这些“黑盒”通常是那些实际使用且可信的Fortran代码的Python封装。第9章虽然表面上讲的是关于演化偏微分方程的伪谱方法,但实际上涵盖了一个对许多科学家都非常有用的主题,即如何在不理解Fortran语言的情况下,在Python语言中以类似Fortran的速度来重用那些通常用Fortran77编写的遗留代码。最后一章讨论通过多重网格求解非常大的线性
评论
还没有评论。