# 零、前言 无论您是科学/分析编程的新手还是经验丰富的专家,这本书都将为您提供成功创建,优化和分发 Python / NumPy 分析模块所需的技能。 从一开始,这本书将涵盖 NumPy 数组的关键功能以及调整数据格式以使其最适合您的分析需求的详细信息。 然后,您将获得各种多维,数据类型的分析所共有的核心和子模块的演练。 接下来,您将继续进行关键技术实现,例如线性代数和傅立叶分析。 最后,您将学习如何使用 Cython 和 NumPy C API 扩展 NumPy 功能的功能和性能。 本书的最后一章还提供了高级材料,可帮助您自己进一步学习。 如果您打算在分析项目中使用 NumPy,则本指南是非常宝贵的教程。 # 这本书涵盖的内容 [第 1 章](../Text/1.html#E9OE1-7febf188d2c44542a50efe01951015f9 "Chapter 1. An Introduction to NumPy"), *NumPy 简介* 是本书的入门章节,它提供了帮助您设置环境的说明。 首先介绍科学 Python 模块系列(SciPy Stack),并说明 NumPy 在 Python 科学计算中所起的关键作用。 [第 2 章](../Text/2.html#K0RQ1-7febf188d2c44542a50efe01951015f9 "Chapter 2. The NumPy ndarray Object")和 *NumPy ndarray 对象* 涵盖了 NumPy ndarray 对象的基本用法,包括初始化,基本属性,数据类型和内存布局。 它还涵盖了操作下的理论,使您可以清晰地了解 ndarray。 [第 3 章](../Text/3.html#QMFO1-7febf188d2c44542a50efe01951015f9 "Chapter 3. Using NumPy Arrays")和 *使用 Numpy 数组* 是有关 NumPy ndarray 使用的高级章节,该章延续了第 2 章 NumPy ndarray 对象。 它涵盖了 NumPy 中的通用功能,并向您展示了加快代码速度的技巧。 它还显示形状控制和广播规则。 [第 4 章](../Text/4.html#10DJ42-7febf188d2c44542a50efe01951015f9 "Chapter 4. NumPy Core and Libs Submodules"), *Numpy 核心和库子模块* 包括两个部分。 第一部分详细说明了 NumPy ndarray 分配内存的方式与 CPU 缓存的交互之间的关系。 本章的第二部分介绍了特殊的 NumPy 数组,其中包含多种数据类型(结构/记录数组)。 此外,本章还将探讨 NumPy 中的实验性 datetime64 模块。 [第 5 章](../Text/5.html#1394Q2-7febf188d2c44542a50efe01951015f9 "Chapter 5. Linear Algebra in NumPy")和 *NumPy 中的线性代数* 从利用线性代数模块的矩阵和数学计算开始。 它向您展示了解决数学问题的多种方法:使用矩阵,向量分解和多项式。 它还提供了曲线拟合和回归的具体实践。 [第 6 章](../Text/6.html#190861-7febf188d2c44542a50efe01951015f9 "Chapter 6. Fourier Analysis in NumPy"), *NumPy 中的傅立叶分析* 涵盖了使用 NumPy FFT 模块进行的信号处理以及傅立叶在放大信号/放大图像时的失真应用。 它还提供了 Python 中 matplotlib 软件包的基本用法。 [第 7 章](../Text/7.html#1DOR01-7febf188d2c44542a50efe01951015f9 "Chapter 7. Building and Distributing NumPy Code"), *构建和分发 NumPy 代码* 涵盖了有关使用 Python 打包和发布代码的基本细节。 它基本介绍了 NumPy 特定的安装文件以及如何构建扩展模块。 [第 8 章](../Text/8.html#1JFUC1-7febf188d2c44542a50efe01951015f9 "Chapter 8. Speeding Up NumPy with Cython"), *使用 Cython 加速 NumPy* ,向用户介绍 Cython 编程语言,并向读者介绍可用于加速现有 Python 代码的技术 。 [第 9 章](../Text/9.html#1P71O1-7febf188d2c44542a50efe01951015f9 "Chapter 9. Introduction to the NumPy C-API"), *NumPy C-API 简介* 提供了对 NumPy C API 的基本介绍,以及一般而言,如何编写现有包装程序 C / C ++库。 本章旨在提供一个简短的介绍,并为读者提供有关如何创建新包装程序和了解现有程序的基本知识。 [第 10 章](../Text/10.html#1UU542-7febf188d2c44542a50efe01951015f9 "Chapter 10. Further Reading"), *进一步阅读* 是本书的最后一章。 它总结了我们在书中所学的内容,并探索了 4 个依赖于 NumPy 数组的 SciPy 堆栈 Python 模块,这些模块为您提供了进一步科学 Python 编程的想法。 # 这本书需要什么 对于本书,您将需要以下设置: * Python 2.x 或 3.x * NumPy 1.9(或更高版本) * IPython 笔记本 * Matplotlib 1.3(或更高版本) * Windows 中的 gnu gcc 编译器或等效版本 * 设置工具 # 这本书适合谁 如果您了解 Python,但对科学编程还是陌生的,并且想进入科学计算的世界,或者您是具有分析经验的 Python 开发人员,但想获得洞察力来增强您的分析技能。 无论哪种情况,NumPy 或这本书都是您的理想选择。 学习 NumPy 以及如何将 NumPy 应用于 Python 程序非常适合作为构建专业分析应用程序的下一步。 熟悉基本的编程概念和数学会有所帮助,但是不需要任何先验经验。 后面的章节涵盖了诸如程序包分发,加速代码和 C / C ++集成之类的概念,这些概念需要一定数量的编程和调试知识。 假定读者能够在其首选的 OS 中构建 C / C ++程序(在 Linux 和 cygwin / migw 中使用 gcc,在 Windows 中使用 gcc)。 # 约定 在本书中,您将找到许多可以区分不同类型信息的文本样式。 以下是这些样式的一些示例,并解释了其含义。 文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字如下所示:“请注意,SciPy 可以表示很多东西,例如名为`scipy`。” 代码块设置如下: ``` In [42]: print("Hello, World!") ``` 任何命令行输入或输出的编写方式如下: ``` **In [6]: x Out[6]: array([[1, 2, 3],        [2, 3, 4]]) In [7]: x[0,0] Out[7]: 1 In [8]: x[1,2] Out[8]: 4** ``` **新术语** 和 **重要词** 用粗体显示。 ### 注意 警告或重要提示会出现在这样的框中。 ### 提示 提示和技巧如下所示。 # 读者反馈 始终欢迎读者的反馈。 让我们知道您对这本书的看法-您喜欢或不喜欢的东西。 读者反馈对我们很重要,因为它可以帮助我们开发出您真正能充分利用的标题。 要向我们发送一般反馈,只需发送电子邮件`<[feedback@packtpub.com](mailto:feedback@packtpub.com)>`,然后在您的邮件主题中提及该书的标题。 如果您有专业知识的主题,并且对写作或撰写书籍感兴趣,请参阅 [www.packtpub.com/authors](https://www.packtpub.com/books/info/packt/authors) 上的作者指南。 # 客户支持 既然您是 Packt 书的骄傲拥有者,我们可以通过很多方法来帮助您从购买中获得最大收益。 ## 下载示例代码 您可以从 [http://www.packtpub.com](http://www.packtpub.com) 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 [http://www.packtpub.com/support](http://www.packtpub.com/support) 并注册以将文件直接通过电子邮件发送给您。 您可以按照以下步骤下载代码文件: 1. 使用您的电子邮件地址和密码登录或注册到我们的网站。 2. 将鼠标指针悬停在顶部的 **SUPPORT** 选项卡上。 3. 单击 **代码下载&勘误表** 。 4. 在 **搜索** 框中输入书籍的名称。 5. 选择您要下载其代码文件的书。 6. 从购买本书的下拉菜单中选择。 7. 点击 **代码下载** 。 您还可以通过在 Packt Publishing 网站上的书籍网页上单击 **代码文件** 按钮来下载代码文件。 通过在 **搜索** 框中输入书名可以访问该页面。 请注意,您需要登录到 Packt 帐户。 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹: * Windows 的 WinRAR / 7-Zip * Mac 版 Zipeg / iZip / UnRarX * 适用于 Linux 的 7-Zip / PeaZip ## 下载本书的彩色图像 我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 彩色图像将帮助您更好地了解输出中的变化。 您可以从 [https://www.packtpub.com/sites/default/files/downloads/NumPyEssentials_ColoredImages.pdf](https://www.packtpub.com/sites/default/files/downloads/NumPyEssentials_ColoredImages.pdf) 下载此文件。 ## 勘误 尽管我们已尽一切努力确保内容的准确性,但还是会发生错误。 如果您发现我们的其中一本书中有错误-可能是文本或代码中的错误-如果您能向我们报告,我们将不胜感激。 这样,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。 如果您发现任何勘误,请访问 [http://www.packtpub.com/submit-errata](http://www.packtpub.com/submit-errata) ,选择您的书,然后点击 **勘误提交表格**进行报告。 链接,然后输入勘误的详细信息。 一旦您的勘误得到验证,您的提交将被接受,勘误将被上传到我们的网站或添加到该标题的勘误部分下的任何现有勘误列表中。 要查看先前提交的勘误,请转到 [https://www.packtpub.com/books/content/support](https://www.packtpub.com/books/content/support) ,然后在搜索字段中输入书籍的名称。 所需信息将出现在 **勘误表** 部分下。 ## 盗版 互联网上版权材料的盗版在所有媒体中都是一个持续存在的问题。 在 Packt,我们非常重视版权和许可的保护。 如果您在 Internet 上以任何形式发现我们的作品的任何非法副本,请立即向我们提供位置地址或网站名称,以便我们寻求补救。 请通过`<[copyright@packtpub.com](mailto:copyright@packtpub.com)>`与我们联系,并提供指向可疑盗版材料的链接。 感谢您在保护我们的作者方面的帮助以及我们为您带来有价值的内容的能力。 ## 问题 如果您对本书的任何方面都有疑问,可以通过`<[questions@packtpub.com](mailto:questions@packtpub.com)>`与我们联系,我们将尽力解决该问题。