编辑推荐
Python不仅是一种通用的编程语言,更是免费且开源的语言和环境,在科学计算领域具有巨大的应用潜力。本书以数学应用为背景介绍Python的相关知识。通过学习本书, 你将认识到Python 是一种将科学计算与数学紧密结合起来的强大工具;学会使用面向对象的Python执行计算任务的方法,并掌握计算数学的一个必要构建块——线性代数及其对象;学会函数和类的使用方法;熟悉测试工具并学习复杂的编程示例;通过Python模块SymPy开启计算机代数的学习之旅。本书将介绍所有需要掌握的Python知识,以及将这些知识应用于线性代数、数组、绘图、迭代、函数以及多项式等的方法。
本书旨在帮助你:
● 理解Python的主要语法元素;
● 了解Python中重要和基本的数据类型
●理解计算数学的一个必要构建块——线性代数及其对象;
● 用Python的matplotlib包创建高质量的表格和图形,以便绘制和可视化结果;
● 定义和使用函数,并学会将它们作为对象使用;
● 使用SciPy和NumPy包,以受益于其强大的与科学计算任务相关的数组数据类型;
● 深入理解何时、以何种方式正确地使用面向对象的Python编程;
● 专注于科学计算编程中的现代测试、调试和分析。
内容介绍
本书旨在通过实际的Python 3.0代码示例展示Python与数学应用程序的紧密联系,介绍将Python中的各种概念用于科学计算的方法。 本书共有15章。第1~3章介绍Python中的主要语法元素、基本数据类型、容器类型等概念;第4~9章介绍线性代数、数组、函数、类、迭代等与数学数据类型紧密相关的内容;第10~14章就有关科学计算程序运行过程中错误处理、输入输出、测试等问题进行探索,并具体给出了一些综合实例,以帮助读者进一步掌握前述章节所涵盖的内容;第15章介绍符号计算的相关内容,旨在让读者了解这一常用于推导和验证理论上的数学模型和数值结果的技术。 本书特色鲜明,示例生动有趣,内容易读易学,既适合Python初学者和程序员阅读,也适合高校计算机专业的教师和学生参考。具有编程经验以及科学计算的爱好者也可以将本书作为研究SciPy和NumPy的参考资料。
作者介绍
Claus Führer是瑞典隆德大学科学计算系的教授。他曾在许多国家和教学机构任教,拥有十分丰富的课堂教学经验,所教授的课程涉及各级数值分析和工程数学的密集程序设计。在与工业界的研究he作中,Claus还开发出了数值分析软件,并因此荣获了2016年度隆德大学工程学院zui佳教师奖。 Jan Eric Solem是Python的狂热爱好者。他曾任瑞典隆德大学的副教授,目前是Mapillary公司(一家街景计算机视觉公司)的CEO。他曾是Polar Rose公司的创始人兼CTO,并担任人脸识别专家,还担任过苹果公司计算机视觉团队的负责人。Jan是世界经济论坛的技术先驱之一,曾凭借图像分析和模式识别的论文荣获2005—2006年度北美*论文奖。他也是《Programming Computer Vision with Python》 一书的作者。 Olivier Verdier于2009年获得了瑞典隆德大学的数学博士学位。他也是德国科隆大学、挪威特隆赫姆大学、挪威卑尔根大学和瑞典乌梅奥大学的博士后。Oliview Verdier早在2007年就开始用Python进行科学计算,目前是挪威卑尔根大学数学系的副教授。
目录
- 第 1章 入门 1
- 1.1 安装和配置说明 1
- 1.1.1 安装 1
- 1.1.2 Anaconda 2
- 1.1.3 配置 3
- 1.1.4 Python Shell 3
- 1.1.5 执行脚本 3
- 1.1.6 获取帮助 4
- 1.1.7 Jupyter – Python笔记本 4
- 1.2 程序与控制流 4
- 1.2.1 注释 5
- 1.2.2 行连接 5
- 1.3 基本类型 6
- 1.3.1 数值类型 6
- 1.3.2 字符串 6
- 1.3.3 变量 7
- 1.3.4 列表 7
- 1.3.5 列表运算符 8
- 1.3.6 布尔表达式 8
- 1.4 使用循环来重复语句 9
- 1.4.1 重复任务 9
- 1.4.2 break和else 9
- 1.5 条件语句 10
- 1.6 使用函数封装代码 10
- 1.7 脚本和模块 11
- 1.7.1 简单的模块—函数的
- 集合 12
- 1.7.2 使用模块和命名空间 13
- 1.8 解释器 13
- 1.9 小结 14
- 第 2章 变量和基本数据类型 15
- 2.1 变量 15
- 2.2 数值类型 16
- 2.2.1 整数类型 17
- 2.2.2 浮点数 17
- 2.2.3 复数 20
- 2.3 布尔类型 23
- 2.3.1 布尔运算符 23
- 2.3.2 布尔类型转换 24
- 2.3.3 布尔类型自动转换 24
- 2.3.4 and和or的返回值 25
- 2.3.5 布尔值和整数 26
- 2.4 字符串类型 26
- 2.5 小结 29
- 2.6 练习 30
- 第3章 容器类型 33
- 3.1 列表 33
- 3.1.1 切片 34
- 3.1.2 步长 36
- 3.1.3 列表修改 36
- 3.1.4 是否属于列表 37
- 3.1.5 列表方法 37
- 3.1.6 原位操作 38
- 3.1.7 列表合并—zip 39
- 3.1.8 列表推导 39
- 3.2 数组 40
- 3.3 元组 41
- 3.4 字典 42
- 3.4.1 创建和修改字典 42
- 3.4.2 循环遍历字典 43
- 3.5 集合 44
- 3.6 容器类型转换 45
- 3.7 类型检查 46
- 3.8 小结 47
- 3.9 练习 47
- 第4章 线性代数—数组 50
- 4.1 数组类型概要 50
- 4.1.1 向量和矩阵 50
- 4.1.2 索引和切片 52
- 4.1.3 线性代数运算 52
- 4.2 数学基础 53
- 4.2.1 作为函数的数组 54
- 4.2.2 基于元素的运算 54
- 4.2.3 形状和维数 54
- 4.2.4 点运算 55
- 4.3 数组类型 57
- 4.3.1 数组属性 57
- 4.3.2 用列表创建数组 57
- 4.4 访问数组项 59
- 4.4.1 基本数组切片 59
- 4.4.2 使用切片修改数组 61
- 4.5 数组构造函数 61
- 4.6 访问和修改形状 62
- 4.6.1 shape函数 62
- 4.6.2 维数 63
- 4.6.3 重塑 63
- 4.7 叠加 65
- 4.8 作用于数组的函数 66
- 4.8.1 通用函数 66
- 4.8.2 数组函数 68
- 4.9 SciPy中的线性代数方法 69
- 4.9.1 使用LU来求解多个线性
- 方程组 70
- 4.9.2 使用SVD来解决*小二乘
- 问题 71
- 4.9.3 其他方法 72
- 4.10 小结 72
- 4.11 练习 73
- 第5章 *级数组 75
- 5.1 数组视图和副本 75
- 5.1.1 数组视图 75
- 5.1.2 切片视图 76
- 5.1.3 转置和重塑视图 76
- 5.1.4 复制数组 76
- 5.2 数组比较 77
- 5.2.1 布尔数组 77
- 5.2.2 数组布尔运算 78
- 5.3 数组索引 79
- 5.3.1 使用布尔数组进行索引 79
- 5.3.2 使用where命令 80
- 5.4 代码性能和向量化 81
- 5.5 广播 83
- 5.5.1 数学视角 83
- 5.5.2 广播数组 86
- 5.5.3 典型示例 88
- 5.6 稀疏矩阵 90
- 5.6.1 稀疏矩阵格式 91
- 5.6.2 生成稀疏矩阵 94
- 5.6.3 稀疏矩阵方法 94
- 5.7 小结 95
- 第6章 绘图 96
- 6.1 基本绘图 96
- 6.2 格式化 100
- 6.3 meshgrid和contours函数 103
- 6.4 图像和等值线 106
- 6.5 matplotlib对象 108
- 6.5.1 坐标轴对象 108
- 6.5.2 修改线条属性 109
- 6.5.3 注释 110
- 6.5.4 曲线间的填充面积 111
- 6.5.5 刻度和刻度标签 112
- 6.6 绘制三维图 113
- 6.7 用绘图制作电影 116
- 6.8 小结 117
- 6.9 练习 117
- 第7章 函数 120
- 7.1 基本原理 120
- 7.2 形参和实参 121
- 7.2.1 参数传递—通过位置和
- 关键字 121
- 7.2.2 更改实参 122
- 7.2.3 访问本地命名空间之外
- 定义的变量 122
- 7.2.4 默认参数 123
- 7.2.5 可变参数 124
- 7.3 返回值 125
- 7.4 递归函数 126
- 7.5 函数文档 128
- 7.6 函数是对象 128
- 7.7 匿名函数—lambda
- 关键字 130
- 7.8 装饰器 131
- 7.9 小结 132
- 7.10 练习 133
- 第8章 类 135
- 8.1 类的简介 136
- 8.1.1 类语法 136
- 8.1.2 _ _init_ _方法 137
- 8.2 属性和方法 138
- 8.2.1 特殊方法 139
- 8.2.2 彼此依赖的属性 143
- 8.2.3 绑定和未绑定方法 145
- 8.2.4 类属性 146
- 8.2.5 类方法 146
- 8.3 子类和继承 148
- 8.4 封装 151
- 8.5 装饰器类 152
- 8.6 小结 154
- 8.7 练习 154
- 第9章 迭代 156
- 9.1 for语句 156
- 9.2 控制循环内流程 157
- 9.3 迭代器 158
- 9.3.1 生成器 159
- 9.3.2 迭代器是一次性的 159
- 9.3.3 迭代器工具 160
- 9.3.4 递归序列的生成器 161
- 9.4 加速收敛 163
- 9.5 列表填充模式 165
- 9.5.1 使用append方法来填充
- 列表 165
- 9.5.2 迭代器中的列表 166
- 9.5.3 存储生成的值 166
- 9.6 将迭代器作为列表使用 167
- 9.6.1 生成器表达式 167
- 9.6.2 压缩迭代器 168
- 9.7 迭代器对象 169
- 9.8 无限迭代 170
- 9.8.1 while循环 170
- 9.8.2 递归 171
- 9.9 小结 171
- 9.10 练习 172
- 第 10章 异常处理 175
- 10.1 什么是异常 175
- 10.1.1 基本原理 177
- 10.1.2 用户定义异常 179
- 10.1.3 上下文管理器—
- with语句 180
- 10.2 查找错误:调试 181
- 10.2.1 漏洞 182
- 10.2.2 堆栈 182
- 10.2.3 Python调试器 183
- 10.2.4 调试命令 185
- 10.2.5 IPython调试 186
- 10.3 小结 187
- 第 11章 命名空间、范围和模块 188
- 11.1 命名空间 188
- 11.2 变量范围 189
- 11.3 模块 191
- 11.3.1 简介 191
- 11.3.2 IPython模块 192
- 11.3.3 变量_ _name_ _ 193
- 11.3.4 一些有用的模块 193
- 11.4 小结 194
- 第 12章 输入和输出 195
- 12.1 文件处理 195
- 12.1.1 文件交互 195
- 12.1.2 文件是可迭代的 196
- 12.1.3 文件模式 197
- 12.2 NumPy方法 198
- 12.2.1 savetxt 198
- 12.2.2 loadtxt 198
- 12.3 Pickling 199
- 12.4 Shelves 200
- 12.5 读写Matlab数据文件 200
- 12.6 读写图像 201
- 12.7 小结 202
- 第 13章 测试 203
- 13.1 手动测试 203
- 13.2 自动测试 204
- 13.3 使用unittest包 206
- 13.4 参数化测试 209
- 13.5 断言工具 210
- 13.6 浮点值比较 210
- 13.7 单元和功能测试 212
- 13.8 调试 213
- 13.9 测试发现 213
- 13.10 测量执行时间 213
- 13.10.1 用魔法函数计时 214
- 13.10.2 使用Python的timeit
- 计时模块 215
- 13.10.3 用上下文管理器
- 计时 216
- 13.11 小结 217
- 13.12 练习 217
- 第 14章 综合示例 219
- 14.1 多项式 219
- 14.1.1 理论背景 219
- 14.1.2 任务 220
- 14.2 多项式类 221
- 14.3 牛顿多项式 225
- 14.4 谱聚类算法 226
- 14.5 解决初始值问题 230
- 14.6 小结 233
- 14.7 练习 233
- 第 15章 符号计算—SymPy 235
- 15.1 什么是符号计算 235
- 15.2 SymPy的基本元素 238
- 15.2.1 符号—所有公式的
- 基础 238
- 15.2.2 数字 239
- 15.2.3 函数 239
- 15.3 基本函数 241
- 15.4 符号线性代数 243
- 15.5 SymPy线性代数方法示例 245
- 15.6 替换 246
- 15.7 评估符号表达式 249
- 15.8 符号表达式转化为数值
- 函数 250
- 15.9 小结 252
- 参考文献 253