提交 48e1310b 编写于 作者: W wizardforcel

2020-07-24 19:09:34

上级 019e1c2e
......@@ -21,7 +21,7 @@
### 注意
请注意,SciPy 可能意味着很多事情:名为 [scipy](http://www.scipy.org/scipylib) 的 Python 模块,整个 SciPy 堆栈( [http://www.scipy .org / about.html](http://www.scipy.org/about.html),或在世界各地举行的有关科学 Python 的三个会议中的任何一个。
请注意,SciPy 可能意味着很多事情:名为 [scipy](http://www.scipy.org/scipylib) 的 Python 模块,[整个 SciPy 堆栈](http://www.scipy.org/about.html),或在世界各地举行的有关科学 Python 的三个会议中的任何一个。
![The scientific Python stack](img/00002.jpeg)
......@@ -112,7 +112,7 @@ C:\Users\JohnDoe> python hello_world.py
面向 Canopy 用户的注意事项:可以使用 Canopy GUI,该 GUI 包括嵌入式 IPython 控制台,文本编辑器和 IPython Notebook 编辑器。 使用命令行时,为了获得最佳效果,请使用 Canopy 的“工具”菜单中的 **Canopy 终端**
Windows OS 用户注意事项:除了 Python 发行版,您还可以从 Ghristoph Gohlke 网站上的 [http://www.lfd.uci.edu/~gohlke/pythonlibs/](http://www.lfd.uci.edu/~gohlke/pythonlibs/) 安装预构建的 Windows python 扩展软件包。
Windows OS 用户注意事项:除了 Python 发行版,您还可以从 [Ghristoph Gohlke 网站](http://www.lfd.uci.edu/~gohlke/pythonlibs/)安装预构建的 Windows python 扩展软件包。
## 使用 Python 包管理器
......
......@@ -13,7 +13,7 @@ NumPy 是 Python 中功能强大的科学模块; 希望在前九章中,我
到目前为止,pandas 是 Python 中最可取的数据预处理模块。 它处理数据的方式与 R 非常相似。它的数据框不仅为您提供视觉上吸引人的表打印输出,而且还允许您以更直观的方式访问数据。 如果您不熟悉 R,请尝试考虑以编程方式使用电子表格软件(例如 Microsoft Excel 或 SQL 表)。 这涵盖了熊猫所做的很多事情。
您可以从熊猫官方网站 [http://pandas.pydata.org/](http://pandas.pydata.org/) 下载并安装熊猫。 一种更可取的方法是使用 pip 或安装 Python 科学发行版,例如 Anaconda。
您可以从 [Pandas 官方网站](http://pandas.pydata.org/)下载并安装熊猫。 一种更可取的方法是使用 pip 或安装 Python 科学发行版,例如 Anaconda。
还记得我们如何使用`numpy.genfromtxt()`读取第 4 章, “Numpy 核心和子模块”中的`csv`数据吗? 实际上,使用熊猫来读取表格并将经过预处理的数据传递给`ndarray`(简单地执行`np.array(data_frame)`会将数据帧转换为多维`ndarray`)对于分析来说是更可取的工作流程。 在本节中,我们将向您展示熊猫的两个基本数据结构:`Series`(用于一维)和`DataFrame`(用于二维或多维)。然后,我们将向您展示如何使用熊猫来读取 表并将数据传递给
......@@ -103,7 +103,7 @@ max 41.000000
在前面的示例中,我们仅获得`Age`列,并按`Age``DataFrame`进行排序。 当我们使用`describe()`时,它将计算所有数字字段的摘要统计信息(包括计数,均值,标准差,最小值,最大值和百分位数)。在本节的最后部分,我们将使用熊猫读取
在本节的最后部分,我们将使用熊猫读取`csv`文件并将一个字段值传递给`ndarray`以进行进一步的计算。 `example.csv`文件来自**国家统计局****ONS**)。 请访问 [http://www.ons.gov.uk/ons/datasets-and-tables/index.html](http://www.ons.gov.uk/ons/datasets-and-tables/index.html) 了解更多详细信息。 我们将在 ONS 网站上使用`Sale counts by dwelling type and local authority, England and Wales`(房屋类型和地方当局(英格兰和威尔士)的销售计数)。 您可以按主题名称搜索它,以访问下载页面或选择您感兴趣的任何数据集。在以下示例中,我们将示例数据集重命名为`sales.csv`
在本节的最后部分,我们将使用熊猫读取`csv`文件并将一个字段值传递给`ndarray`以进行进一步的计算。 `example.csv`文件来自**国家统计局****ONS**)。 请访问[这里](http://www.ons.gov.uk/ons/datasets-and-tables/index.html)了解更多详细信息。 我们将在 ONS 网站上使用`Sale counts by dwelling type and local authority, England and Wales`(房屋类型和地方当局(英格兰和威尔士)的销售计数)。 您可以按主题名称搜索它,以访问下载页面或选择您感兴趣的任何数据集。在以下示例中,我们将示例数据集重命名为`sales.csv`
```py
In [15]: sales = pd.read_csv('sales.csv')
......@@ -130,7 +130,7 @@ Name: 1995_COUNT_ALL_TYPES, dtype: object
Scikit 是 SciPy 工具包的缩写,它是 SciPy 的附加软件包。 它提供了广泛的分析模块,而 scikit-learn 是其中之一。 这是迄今为止最全面的 Python 机器学习模块。 scikit-learn 提供了一种简单有效的方法来执行数据挖掘和数据分析,并且它拥有非常活跃的用户社区。
您可以从 scikit-learn 的官方网站下载并安装它,网址为 [http://scikit-learn.org/stable/](http://scikit-learn.org/stable/) 。 如果您使用的是 Python 科学发行版(例如 Anaconda),则也包含在其中。
您可以[从 scikit-learn 的官方网站下载并安装它](http://scikit-learn.org/stable/)。 如果您使用的是 Python 科学发行版(例如 Anaconda),则也包含在其中。
现在,是时候使用 scikit-learn 进行一些机器学习了。 scikit-learn 的优点之一是它提供了一些用于实践的样本数据集(演示数据集)。 让我们首先加载糖尿病数据集。
......@@ -217,9 +217,9 @@ Out[12]: 0.48699089712593369
netCDF4 是 netCDF 库的第四个版本,该库是在 HDF5(分层数据格式,旨在存储和组织大量数据)的基础上实现的,从而可以管理非常大和复杂的多维数据。 netCDF4 的最大优点是,它是一种完全可移植的文件格式,对集合中数据对象的数量或大小没有限制,并且在可归档的同时也可以追加。 许多科研组织将其用于数据存储。 Python 还具有访问和创建此类数据格式的接口。
您可以从 [http://unidata.github.io/netcdf4-python/](http://unidata.github.io/netcdf4-python/) 的官方文档页面下载并安装该模块,或从 [https:// github 的 GitHub 存储库中克隆该模块。 .com / Unidata / netcdf4-python](https://github.com/Unidata/netcdf4-python) 。 它不包含在标准的 Python Scientific 发行版中,但已内置在 NumPy 中,可以与 Cython 一起构建(建议但并非必需)。
您可以从[官方文档页面](http://unidata.github.io/netcdf4-python/),或从[这里](https://github.com/Unidata/netcdf4-python)下载并安装该模块。 它不包含在标准的 Python Scientific 发行版中,但已内置在 NumPy 中,可以与 Cython 一起构建(建议但并非必需)。
对于以下示例,我们将使用 Unidata 网站上的示例`netCDF4`文件,该文件位于 [http://www.unidata.ucar.edu/software/netcdf/examples/files.html](http://www.unidata.ucar.edu/software/netcdf/examples/files.html) ,并且 我们将以气候系统模型为例:`sresa1b_ncar_ccsm3-example.nc`
对于以下示例,我们将使用 Unidata 网站上的示例`netCDF4`文件,该文件位于[这里](http://www.unidata.ucar.edu/software/netcdf/examples/files.html),并且 我们将以气候系统模型为例:`sresa1b_ncar_ccsm3-example.nc`
首先,我们将使用`netCDF4`模块稍微探索一下数据集,并提取我们需要进行进一步分析的值:
......@@ -343,7 +343,7 @@ In [8]: plt.show()
![SciPy](img/00041.jpeg)
接下来,我们将使用 SciPy `scipy.ndimage`中的多维图像处理模块对噪波图像应用滤镜以使其平滑。 `ndimage`模块提供各种过滤器; 有关详细列表,请参考 [http://docs.scipy.org/doc/scipy/reference/ndimage.html](http://docs.scipy.org/doc/scipy/reference/ndimage.html) ,但是在以下示例中,我们将仅使用高斯和均匀滤波器:
接下来,我们将使用 SciPy `scipy.ndimage`中的多维图像处理模块对噪波图像应用滤镜以使其平滑。 `ndimage`模块提供各种过滤器; 有关详细列表,请参考[这里](http://docs.scipy.org/doc/scipy/reference/ndimage.html),但是在以下示例中,我们将仅使用高斯和均匀滤波器:
```py
In [9]: from scipy import ndimage
......
......@@ -163,7 +163,7 @@ In [16]: def sum_col(x):
### 注意
IPython 提供了一些魔术函数来帮助我们更好地理解代码。 有关更多详细信息,请参见[http://ipython.readthedocs.org/en/stable/interactive/magics.html?highlight=magic](http://ipython.readthedocs.org/en/stable/interactive/magics.html?highlight=magic)
IPython 提供了一些魔术函数来帮助我们更好地理解代码。 有关更多详细信息,请参见[这里](http://ipython.readthedocs.org/en/stable/interactive/magics.html?highlight=magic)
```py
In [17]: %timeit sum_row(c_array)
......@@ -353,9 +353,7 @@ Out[48]: [ 6 9 10 7 9 5 8 8 9 3]
`randint`函数带有三个参数,其中两个是可选的。 第一个参数表示输出值的期望下限,第二个可选参数表示输出值的(专有)上限。 可选的`size`参数是一个元组,用于确定输出数组的形状。
还有许多其他功能,例如将随机数生成器植入随机子模块中。 有关详细信息,请参考:
[http://docs.scipy.org/doc/numpy/reference/routines.random.html](http://docs.scipy.org/doc/numpy/reference/routines.random.html)
还有许多其他功能,例如将随机数生成器植入随机子模块中。 有关详细信息,请参考[这里](http://docs.scipy.org/doc/numpy/reference/routines.random.html)
## 其他数组
......@@ -397,7 +395,7 @@ Out[58]: dtype('S1')
```
有关 NumPy 支持的数据类型的完整列表,请参考 [http://docs.scipy.org/doc/numpy/user/basics.types.html](http://docs.scipy.org/doc/numpy/user/basics.types.html)
有关 NumPy 支持的数据类型的完整列表,请参考[这里](http://docs.scipy.org/doc/numpy/user/basics.types.html)
# 总结
......
......@@ -84,7 +84,7 @@ Out[20]: dtype('int32')
# 通用功能(ufuncs)
NumPy 具有许多通用函数(所谓的 ufuncs),因此可以利用它们来发挥自己的优势,从而尽可能地减少循环以优化代码。 ufunc 在数学,三角函数,汇总统计信息和比较运算方面有很好的覆盖范围。 有关详细的 ufunc 列表,请参考在线文档 [http://docs.scipy.org/doc/numpy/reference/ufuncs.html](http://docs.scipy.org/doc/numpy/reference/ufuncs.html)
NumPy 具有许多通用函数(所谓的 ufuncs),因此可以利用它们来发挥自己的优势,从而尽可能地减少循环以优化代码。 ufunc 在数学,三角函数,汇总统计信息和比较运算方面有很好的覆盖范围。 有关详细的 ufunc 列表,请参考[在线文档](http://docs.scipy.org/doc/numpy/reference/ufuncs.html)
由于 NumPy 中有大量的 ufunc,我们很难在一章中涵盖所有这些功能。 在本节中,我们仅旨在了解如何以及为何应使用 NumPy ufuncs。
......
......@@ -166,7 +166,7 @@ array([(10, 0.5, 'NumPy'), (100, -0.5, 'Essential')],
在进一步介绍记录数组之前,让我们先整理一下如何定义记录数组。 最简单的方法如上一个示例所示,在该示例中,我们初始化 NumPy 数组,并使用 string 参数指定字段的数据类型。
NumPy 可以接受多种形式的字符串参数(有关详细信息,请参见 [http://docs.scipy.org/doc/numpy/user/basics.rec.html](http://docs.scipy.org/doc/numpy/user/basics.rec.html); 最优选的可以选自以下之一:
NumPy 可以接受多种形式的字符串参数(有关详细信息,请参见[这里](http://docs.scipy.org/doc/numpy/user/basics.rec.html); 最优选的可以选自以下之一:
| **数据类型** | **表示形式** |
| --- | --- |
......@@ -230,7 +230,7 @@ array([(10, 'NumPy'), (100, 'Essential')],
```
您可能会发现此示例过于简单; 如果是这样,您可以尝试使用来自 Wikipedia 的数据从包含国家名称,人口和排名的真实示例创建一个新的记录数组: [https://zh.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population [](https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population) 。 这样会更有趣!
您可能会发现此示例过于简单; 如果是这样,您可以尝试使用[来自 Wikipedia 的数据](https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population)从包含国家名称,人口和排名的真实示例创建一个新的记录数组。 这样会更有趣!
## NumPy 中的日期和时间
......@@ -246,7 +246,7 @@ Out[43]: (dtype('<M8[D]'), dtype('<M8[M]'))
```
`x``y`都是`numpy.datetime64`对象,并由 ISO 8601 字符串构造(通用日期格式-有关详细信息,请参见 [https://en.wikipedia.org/wiki/ISO_8601](https://en.wikipedia.org/wiki/ISO_8601)。 但是`x`的输入字符串包含天单位,而`y`的字符串则没有。 创建 NumPy `datetime64`时,它将自动从输入字符串的形式中进行选择,因此当我们为`x``y`都打印出`dtype`时,我们可以看到`x`的单位为`D`。 ]代表几天,而`y`和单位`M`代表几个月。 `<`也是字节序,这里是 big-endian,M8 是`datetime64`的缩写(从`np.int64`实现)。 `numpy.datetime64`支持的默认日期单位是年(`Y`),月(`M`),周(`W`)和天(`D`),而时间单位是小时(`h`)。 ,分钟(`m`),秒(`s`)和毫秒(`ms`)。
`x``y`都是`numpy.datetime64`对象,并由 ISO 8601 字符串构造(通用日期格式-有关详细信息,请参见[这里](https://en.wikipedia.org/wiki/ISO_8601)。 但是`x`的输入字符串包含天单位,而`y`的字符串则没有。 创建 NumPy `datetime64`时,它将自动从输入字符串的形式中进行选择,因此当我们为`x``y`都打印出`dtype`时,我们可以看到`x`的单位为`D`。 ]代表几天,而`y`和单位`M`代表几个月。 `<`也是字节序,这里是 big-endian,M8 是`datetime64`的缩写(从`np.int64`实现)。 `numpy.datetime64`支持的默认日期单位是年(`Y`),月(`M`),周(`W`)和天(`D`),而时间单位是小时(`h`)。 ,分钟(`m`),秒(`s`)和毫秒(`ms`)。
当然,我们在创建数组时可以指定单位,也可以使用`numpy.arange()`方法创建数组的序列。 请参阅以下示例:
......@@ -366,7 +366,7 @@ array([(0, 0.07020000368356705, '2014-07-10'),
`delimiter`参数也是可选的,默认情况下,任何连续的空格都用作分隔符。 但是,对于 CSV 文件,我们使用了“ `,`”。 我们在方法中使用的最后一个可选参数是`skip_header`。 尽管我们没有在文件中的记录顶部添加字段名称,但是 NumPy 提供了跳过文件开头多行的功能。
除了`skip_header`之外,`numpy.genfromtext()`函数还支持 22 种以上的操作参数以微调数组,例如定义缺失值和填充值。 有关更多详细信息,请参阅 [http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.genfromtxt.html](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.genfromtxt.html)
除了`skip_header`之外,`numpy.genfromtext()`函数还支持 22 种以上的操作参数以微调数组,例如定义缺失值和填充值。 有关更多详细信息,请参阅[这里](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.genfromtxt.html)
现在将数据读到记录数组中,您将发现第二个字段是小数点后四位数以上,这是我们在导出 CSV 时指定的。 这样做的原因是因为我们在读取时使用`f4`作为其数据类型。NumPy 将填充空数字,但有效的四位数字与文件中的数字相同。 您可能还会注意到我们丢失了字段名,因此让我们指定它:
......
......@@ -13,7 +13,7 @@ NumPy 专为数值计算而设计; 在引擎盖下,它仍然是功能强大
对于线性代数,使用矩阵可能更直接。 NumPy 中的矩阵对象继承了`ndarray`的所有属性和方法,但严格来说是二维的,而`ndarray`可以是多维的。 使用 NumPy 矩阵的众所周知的优点是它们提供矩阵乘法作为`*`表示法; 例如,如果`x``y`是矩阵,则`x * y`是它们的矩阵乘积。 但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符“
但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符“ `@`”支持本机矩阵乘法。 因此这是使用`ndarray`[https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465](https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465)的另一个很好的理由。
但是,从 Python 3.5 / NumPy 1.10 开始,新的运算符“`@`”支持本机矩阵乘法。 因此这是使用[`ndarray`](https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465)的另一个很好的理由。
但是,矩阵对象仍提供方便的转换,例如逆和共轭转置,而`ndarray`不提供。 让我们从创建 NumPy 矩阵开始:
......@@ -183,7 +183,7 @@ array([[ 10, 20, 30, 40],
![Linear algebra in NumPy](img/00012.jpeg)
最后一个是`numpy.cross()`乘积,它是三维空间中两个向量的二进制运算(并且仅适用于向量),其结果是垂直于两个输入数据的向量(`a``b`)。 如果您不熟悉外部产品,请参考 [https://en.wikipedia.org/wiki/Cross_product](https://en.wikipedia.org/wiki/Cross_product) 。 以下示例显示`a``b`是向量数组,以及(`a``b`)和(`b``a`)的叉积:
最后一个是`numpy.cross()`乘积,它是三维空间中两个向量的二进制运算(并且仅适用于向量),其结果是垂直于两个输入数据的向量(`a``b`)。 如果您不熟悉外部产品,请参考[这里](https://en.wikipedia.org/wiki/Cross_product)。 以下示例显示`a``b`是向量数组,以及(`a``b`)和(`b``a`)的叉积:
```py
In [31]: a = np.array([1,0,0])
......@@ -246,7 +246,7 @@ matrix([[ 0.2667],
# 分解
`numpy.linalg`提供了分解,在本节中,我们将介绍两种最常用的分解:**奇异值分解****svd**)和 **QR** 因式分解。 让我们首先计算**特征值****特征向量**。 在我们开始之前,如果您不熟悉特征值和特征向量,可以在 [https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors](https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors) 进行检查。 开始吧:
`numpy.linalg`提供了分解,在本节中,我们将介绍两种最常用的分解:**奇异值分解****svd**)和 **QR** 因式分解。 让我们首先计算**特征值****特征向量**。 在我们开始之前,如果您不熟悉特征值和特征向量,可以在[这里](https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors)进行检查。 开始吧:
```py
In [41]: x = np.random.randint(0, 10, 9).reshape(3,3)
......@@ -452,13 +452,13 @@ Out[82]: True
```
多项式包还提供了特殊的多项式,例如 Chebyshev,Legendre 和 Hermite。 有关这些内容的更多详细信息,请参考 [http://docs.scipy.org/doc/numpy-1.10.0/reference/routines.polynomials.classes.html](http://docs.scipy.org/doc/numpy-1.10.0/reference/routines.polynomials.classes.html)
多项式包还提供了特殊的多项式,例如 Chebyshev,Legendre 和 Hermite。 有关这些内容的更多详细信息,请参考[这里](http://docs.scipy.org/doc/numpy-1.10.0/reference/routines.polynomials.classes.html)
总之,在大多数情况下,`ndarray`和 NumPy 函数可以解决与多项式有关的问题。 它们也是一种更可取的方式,因为程序中类型之间的转换较少,这意味着较少的潜在问题。 但是,在处理特殊多项式时,我们仍然需要多项式包。 我们几乎完成了数学部分。 在下一节中,我们将讨论线性代数的应用。
# 应用-回归和曲线拟合
由于我们在讨论线性代数的应用,因此我们的经验来自实际案例。 让我们从线性回归开始。 因此,假设我们对一个人的年龄与其睡眠质量之间的关系感到好奇。 我们将使用 2012 年大不列颠睡眠调查( [https://www.sleepio.com/2012report/](https://www.sleepio.com/2012report/)在线提供的数据。
由于我们在讨论线性代数的应用,因此我们的经验来自实际案例。 让我们从线性回归开始。 因此,假设我们对一个人的年龄与其睡眠质量之间的关系感到好奇。 我们将使用 [2012 年大不列颠睡眠调查](https://www.sleepio.com/2012report/)在线提供的数据。
有 20,814 人参加了调查,年龄范围从 20 岁以下到 60 岁以上,他们通过 4 到 6 分对他们的睡眠质量进行了评估。
......@@ -518,7 +518,7 @@ Out[92]: 6.30307651938
您可能认为回归线方程看起来很熟悉。 还记得我们在矩阵部分求解的第一个线性方程吗? 是的,您也可以使用`numpy.linalg.lstsq()`来求解`Ax = b`方程,实际上这将是本章的第四个解决方案。 自己尝试; 用法与您使用`numpy.linalg.solve()`时非常相似。
但是,并非每个问题都能简单地通过绘制回归线来回答,例如按年的房价。 它显然不是线性关系,可能是平方或三次关系。 那么我们如何解决这个问题呢? 让我们使用房价指数(国家统计局 [http://ons.gov.uk/ons/taxonomy/index.html?nscl=House+Price+Indices#tab-data-tables)中的统计数据](http://ons.gov.uk/ons/taxonomy/index.html?nscl=House+Price+Indices#tab-data-tables) ),然后选择 2004 年至 2013 年。我们将平均房价(英镑)调整为通胀因素; 我们想知道明年的平均价格。
但是,并非每个问题都能简单地通过绘制回归线来回答,例如按年的房价。 它显然不是线性关系,可能是平方或三次关系。 那么我们如何解决这个问题呢? 让我们使用房价指数([国家统计局中的统计数据](http://ons.gov.uk/ons/taxonomy/index.html?nscl=House+Price+Indices#tab-data-tables)),然后选择 2004 年至 2013 年。我们将平均房价(英镑)调整为通胀因素; 我们想知道明年的平均价格。
在寻求解决方案之前,让我们首先分析问题。 问题的背后是多项式曲线拟合问题; 我们想找到最适合我们的问题的多项式,但是我们应该为它选择哪个 NumPy 函数? 但是在此之前,让我们创建两个变量:每年的价格`price`和房屋的年份`year`
......
......@@ -13,7 +13,7 @@
众所周知,傅里叶分析将函数表示为周期分量的总和(正弦和余弦函数的组合),并且这些分量能够恢复原始函数。 它在数字信号处理(例如滤波,插值等)中具有广泛的应用程序,因此我们在不提供 NumPy 的任何应用程序细节的情况下就不想谈论 NumPy 中的傅立叶分析。 为此,我们需要一个可视化的模块。
Matplotlib 是我们将在本章中使用的可视化模块。 请从官方网站下载并安装它: [http://matplotlib.org/downloads.html](http://matplotlib.org/downloads.html) 。 或者,如果您正在使用 Anaconda 之类的 Scientific Python 发行版,则应该已经包括了 matplotlib。
Matplotlib 是我们将在本章中使用的可视化模块。 [请从官方网站下载并安装它](http://matplotlib.org/downloads.html)。 或者,如果您正在使用 Anaconda 之类的 Scientific Python 发行版,则应该已经包括了 matplotlib。
我们将编写一个名为`show()`的简单显示函数,以帮助我们了解本章中的练习示例。 函数输出如下图所示:
......@@ -281,7 +281,7 @@ Out[51]: True
# 傅立叶变换应用
在前面的部分中,您学习了如何将`numpy.fft`用于一个一维和多维`ndarray`,并在幕后了解了实现细节。 现在是一些应用程序的时候了。 在本节中,我们将使用傅立叶变换进行一些图像处理。 我们将分析光谱,然后对图像进行插值以将其放大到两倍大小。 首先,让我们从 Packt Publishing 网站博客文章中下载练习图像: [https://www.packtpub.com/books/content/python-data-scientists](https://www.packtpub.com/books/content/python-data-scientists) 。 将映像另存为本地目录`scientist.png`
在前面的部分中,您学习了如何将`numpy.fft`用于一个一维和多维`ndarray`,并在幕后了解了实现细节。 现在是一些应用程序的时候了。 在本节中,我们将使用傅立叶变换进行一些图像处理。 我们将分析光谱,然后对图像进行插值以将其放大到两倍大小。 首先,[让我们从 Packt Publishing 网站博客文章中下载练习图像](https://www.packtpub.com/books/content/python-data-scientists)。 将映像另存为本地目录`scientist.png`
![Fourier transform application](img/00027.jpeg)
......
......@@ -14,7 +14,7 @@
# 准备工具
要在您的系统上安装`setuptools`,您需要先从 [https://pypi.python.org/pypi/setuptools](https://pypi.python.org/pypi/setuptools) 下载系统中的`ez_setup.py`,然后从命令提示符处执行以下操作 :
要在您的系统上安装`setuptools`,您需要先从[这里](https://pypi.python.org/pypi/setuptools)下载系统中的`ez_setup.py`,然后从命令提示符处执行以下操作 :
```py
$ python ez_setup.py
......@@ -99,7 +99,7 @@ setup(
* `version`:-这是您的项目的版本。 这将附加到安装程序名称的末尾。
* `long_description`-在 PyPI 网站上显示时,它将转换为 HTML。 它应该包含有关您的项目打算提供的信息。 您可以直接在脚本中编写它; 但是,最佳实践是维护`README`文件并从此处读取说明。
* `install_required`-这是用于添加安装依赖性的列表。 您将添加代码中使用的第三方模块的名称和版本。 请注意遵循约定以在此处指定版本。
* `classifiers`-当您在 PyPI 网站上上传软件包时,将选中此选项。 您应该从以下网站提供的选项中进行选择: [https://pypi.python.org/pypi?:action=list_classifiers](https://pypi.python.org/pypi?:action=list_classifiers)
* `classifiers`-当您在 PyPI 网站上上传软件包时,将选中此选项。 [您应该从以下网站提供的选项中进行选择](https://pypi.python.org/pypi?:action=list_classifiers)
现在,使用`build`选项运行`setup.py`应该不会给您任何错误,并生成带有`.egg-info`后缀的文件夹。 此时,您可以使用`sdist`选项运行`setup.py`,并创建一个可以与世界共享的软件包。
......@@ -124,7 +124,7 @@ python setup.py install
## 添加 NumPy 和非 Python 源代码
接下来,我们将研究一些特定于 NumPy 的代码,并了解如何提高设置的错误处理能力; 通常,我们将探索一些良好的编程习惯。 我们还将展示如何将非 Python 源(`c,fortran``f2py`)添加到安装程序中。 以下分析显示了完整代码的一部分,您可以在随附的代码文件中或在 [https://bitbucket.org/tdatta/books/](https://bitbucket.org/tdatta/books/) 中找到这些代码:
接下来,我们将研究一些特定于 NumPy 的代码,并了解如何提高设置的错误处理能力; 通常,我们将探索一些良好的编程习惯。 我们还将展示如何将非 Python 源(`c,fortran``f2py`)添加到安装程序中。 以下分析显示了完整代码的一部分,您可以在随附的代码文件中或在[这个页面](https://bitbucket.org/tdatta/books/)中找到这些代码:
```py
if sys.version_info[0] < 3:
......
......@@ -30,7 +30,7 @@ Cython 编程语言是 Python 的超集,用户仍然喜欢 Python 所提供的
Cython 是一个将类型定义的 Python 代码转换为 C 代码的编译器,该代码仍在 Python 环境中运行。 最终输出是本机代码,其运行速度比 Python 生成的字节码快得多。 在大量使用循环的代码中,Python 代码加速的幅度更加明显。 为了编译 C 代码,首要条件是在计算机上安装 C/C++ 编译器,例如`gcc`(Linux)或`mingw`(Windows)。
第二步是安装 Cython。 Cython 与其他带有 Python 模块的库一样,可以使用任何首选的方法(pip,easy_install 等)进行安装。 完成这两个步骤后,您可以通过尝试从 Shell 调用 Cython 来测试设置。 如果收到错误消息,则说明您错过了第二步,需要重新安装 Cython 或从 Cython 官方网站( [http://cython.org/#download](http://cython.org/#download)下载 TAR 归档文件,然后 从此下载的`root`文件夹中运行以下命令:
第二步是安装 Cython。 Cython 与其他带有 Python 模块的库一样,可以使用任何首选的方法(pip,easy_install 等)进行安装。 完成这两个步骤后,您可以通过尝试从 Shell 调用 Cython 来测试设置。 如果收到错误消息,则说明您错过了第二步,需要重新安装 Cython 或从 [Cython 官方网站](http://cython.org/#download)下载 TAR 归档文件,然后 从此下载的`root`文件夹中运行以下命令:
```py
python setup.py install
......
......@@ -21,7 +21,7 @@ NumPy 是一个通用库,旨在满足科学应用程序开发人员的大多
### 提示
开发人员可以尝试使用称为 **cpychecker** 的工具来检查模块中的引用计数时的常见错误。 请访问 [http://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html](http://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html) 了解更多详细信息。
开发人员可以尝试使用称为 **cpychecker** 的工具来检查模块中的引用计数时的常见错误。 请访问[这里](http://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html)了解更多详细信息。
# 扩展模块的基本结构
......@@ -122,7 +122,7 @@ static PyMethodDefApi_methods[] =
# 使用 Python C-API 创建数组平方函数
Python 函数将对自身的引用作为第一个参数,然后是赋予该函数的真实参数。 `PyArg_ParseTuple`函数用于将 Python 函数中的值解析为 C 函数中的局部变量。 在此函数中,我们将值强制转换为双精度,因此我们将`d`用作第二个参数。 您可以在 [https://docs.python.org/2/c-api/arg.html](https://docs.python.org/2/c-api/arg.html) 上查看此函数接受的字符串的完整列表。
Python 函数将对自身的引用作为第一个参数,然后是赋予该函数的真实参数。 `PyArg_ParseTuple`函数用于将 Python 函数中的值解析为 C 函数中的局部变量。 在此函数中,我们将值强制转换为双精度,因此我们将`d`用作第二个参数。 您可以在[这个页面](https://docs.python.org/2/c-api/arg.html)上查看此函数接受的字符串的完整列表。
使用`Py_Buildvalue`返回计算的最终结果,它使用类似类型的格式字符串从您的答案中创建 Python 值。 我们在这里使用`f`表示浮点数,以证明对 double 和 float 的处理方式类似:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册