提交 2dd4a888 编写于 作者: W wizardforcel

2020-07-24 17:49:17

上级 d0401ea2
......@@ -153,7 +153,7 @@ $ conda install numpy # for Anaconda users**
恭喜你! 我们现在准备开始。
# 摘要
# 总结
在本章中,我们向自己介绍了 NumPy 模块。 我们了解了 NumPy 是如何为从事科学计算工作的人们提供的有用软件工具。 我们安装了完成本书其余部分所需的软件。
......
......@@ -50,7 +50,7 @@ dtype: int64
```
我们将索引从数字更改为从 *AE* 的字母。 更方便的是,当我们将 Python 词典转换为熊猫`Series`时,执行此操作所需的键将自动成为索引。 尝试练习转换字典。 接下来,我们将探索`DataFrame`,这是大熊猫中最常用的数据结构:
我们将索引从数字更改为从 *A-E* 的字母。 更方便的是,当我们将 Python 词典转换为熊猫`Series`时,执行此操作所需的键将自动成为索引。 尝试练习转换字典。 接下来,我们将探索`DataFrame`,这是大熊猫中最常用的数据结构:
```py
In [8]: data = {'Name': ['Brian', 'George', 'Kate', 'Amy', 'Joe'],
......@@ -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 网站上使用*房屋类型和地方当局(英格兰和威尔士)的销售计数*。 您可以按主题名称搜索它,以访问下载页面或选择您感兴趣的任何数据集。在以下示例中,我们将示例数据集重命名为`sales.csv`
在本节的最后部分,我们将使用熊猫读取`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`
```py
In [15]: sales = pd.read_csv('sales.csv')
......@@ -159,7 +159,7 @@ Out[4]: (442, 10)
我们从`sklearn.datasets`中加载了一个名为`diabetes`的样本数据集; 它包含 442 个观测值,10 个维度,范围从-2 到 2\. `Toy`数据集还提供了标记数据用于监督学习(如果您不熟悉机器学习,请尝试将标记数据视为类别)。 在我们的示例中,可以从`diabetes.target`调用`diabetes`数据集中的标记数据,范围为 25 到 346。
还记得我们在第 5 章, *numpy* 中的线性代数中如何进行线性回归吗? 我们将使用 scikit-learn 再次执行它。 同样,我建议您在开发脚本以帮助您进行研究或分析时,请使用 NumPy `ndarray`作为常规数据格式; 但是,对于计算,使用 scipy,scikit-learn 或其他科学模块会更好。 机器学习的优势之一是模型评估(您可以在其中训练和测试结果)。 使用此方法,我们将数据分为两个数据集:训练数据集和测试数据集,然后将这两个数据集传递给线性回归:
还记得我们在第 5 章, “numpy 中的线性代数”中如何进行线性回归吗? 我们将使用 scikit-learn 再次执行它。 同样,我建议您在开发脚本以帮助您进行研究或分析时,请使用 NumPy `ndarray`作为常规数据格式; 但是,对于计算,使用 scipy,scikit-learn 或其他科学模块会更好。 机器学习的优势之一是模型评估(您可以在其中训练和测试结果)。 使用此方法,我们将数据分为两个数据集:训练数据集和测试数据集,然后将这两个数据集传递给线性回归:
```py
In [5]: from sklearn.cross_validation import train_test_split
......@@ -323,7 +323,7 @@ In [3]: image_data = ascent()
首先,我们从 SciPy 的其他例程中导入三个函数:`imread``imsave``ascent`。 在下面的示例中,我们使用内置图像`ascent`,它是 512 x 512 灰度图像。 当然,您可以使用自己的图像。 只需调用`imread('your_image_name')`,它将作为`ndarray`加载。
我们在此处导入的`matplotlib`模块的`pyplot`结果仅用于显示图像; 我们在第 6 章,*在 NumPy* 中进行了傅里叶分析。 这是内置图像`ascent`
我们在此处导入的`matplotlib`模块的`pyplot`结果仅用于显示图像; 我们在第 6 章,“在 NumPy* 中进行了傅里叶分析”这样做了。 这是内置图像`ascent`
![SciPy](img/00040.jpeg)
......@@ -364,9 +364,9 @@ In [18]: plt.show()
首先,我们从 SciPy 导入`ndimage`,在`noise_image`上应用高斯滤波器,将`sigma`(高斯内核的标准偏差)设置为`3`,然后将其保存到`gaussian_denoised.png`。 查看上一张图片的左侧。 通常,sigma 越大,图像将越平滑,这意味着细节丢失。 我们应用的第二个过滤器是 Uniform 过滤器,并采用了所有参数的默认值,这将导致上一张图像的右侧。 尽管统一滤波器保留了原始图像的更多细节,但图像仍包含噪点。
上一个示例是使用 SciPy 的简单图像处理示例。 但是,SciPy 不仅可以处理图像处理,还可以执行许多类型的分析/科学计算。 有关详细信息,请参阅*数值科学计算学习科学**第二版**Packt Publishing*
上一个示例是使用 SciPy 的简单图像处理示例。 但是,SciPy 不仅可以处理图像处理,还可以执行许多类型的分析/科学计算。 有关详细信息,请参阅《SciPy 数值和科学计算学习手册第二版》,*Packt Publishing*
# 摘要
# 总结
NumPy 当然是使用 Python 进行科学计算的核心:许多模块都基于 NumPy。 尽管有时您可能会发现 NumPy 没有分析模块,但它无疑为您提供了一种接触广泛科学模块的方法。
......
......@@ -399,6 +399,6 @@ 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 ndarray 对象的一些基础知识。 我们研究了一些创建 NumPy 数组的基本方法。 我们还研究了数组的副本和视图之间的差异,以及它们如何影响使用索引和切片的情况。 我们看到了 NumPy 提供的内存布局之间的细微差别。 现在,我们已经配备了 ndarray 对象的基本词汇,并且可以开始使用 NumPy 的核心功能。 在下一章中,我们将探索 ndarray 的更多细节,并使用某些技巧和窍门(通用函数和形状操作)向您展示其中的一些技巧,以使您的 NumPy 脚本加速!
\ No newline at end of file
......@@ -367,7 +367,7 @@ numpy.resize
```
# 摘要
# 总结
在本章中,我们介绍了 NumPy 及其 ufunc 的基本操作。 我们看了 NumPy 操作和 Python 循环之间的巨大差异。 我们还研究了广播的工作原理以及应避免的情况。 我们也试图理解掩蔽的概念。
......
......@@ -394,7 +394,7 @@ dtype = [('id', '<i4'), ('value', '<f4'), ('date', 'S10'), ('mask','i1')])
仅当直接导入`numpy.lib.recfunctions`且模块中具有`append_field()`功能时,才能访问它。 追加一个记录数组就像追加一个 NumPy 数组一样简单:第一个参数是基本数组;第二个参数是基本数组。 第二个参数是新字段名称`mask`以及与之关联的数据; 最后一个参数是数据类型。 由于掩码是布尔数组,因此 NumPy 会自动将掩码应用于记录数组,但是我们仍然可以看到在`read_array`中添加了一个新字段,掩码的值反映了阈值(`>= 0.75``value`字段。 这只是向您展示如何将 NumPy 数组与数据文件连接的开始。 现在是时候对您的数据进行一些真实的分析了!
# 摘要
# 总结
在本章中,我们介绍了 ndarray 对象的最后一个重要组成部分:步幅。 当您使用不同的方式初始化 NumPy 数组时,我们看到了内存布局和性能上的巨大差异。 我们还了解了记录数组(结构化数组)以及如何在 NumPy 中操纵日期/时间。 最重要的是,我们看到了如何使用 NumPy 读写数据。
......
......@@ -551,7 +551,7 @@ Out[101]: 129716.66666666642
NumPy 可以从线性代数中获得许多应用程序,例如插值和外推,但是我们不能在本章中全部介绍它们。 我们希望本章为您使用 NumPy 解决线性或多项式问题提供一个良好的开端。
# 摘要
# 总结
在本章中,我们介绍了线性代数的矩阵类和多项式类。 我们研究了两个类提供的高级功能,还看到了`ndarray`在进行基本转置时的性能优势。 我们还介绍了`numpy.linalg`类,它提供了许多函数来处理`ndarray`的线性或多项式计算。
......
......@@ -356,7 +356,7 @@ In [74]: plt.show()
在上一个代码块中,我们首先获取了`fft_shift`数组的形状(大小与`gray_img`相同)。 然后我们创建了两个零`ndarrays`并将它们沿四个方向填充到`fft_shift`数组中以将其放大。 因此,当我们将修改后的`fft_shift`数组逆回到标准阶数时,零频率将完美地位于中间。 当我们进行逆变换时,您可以看到形状已经加倍。 为了让`pyplot`模块绘制新数组,我们需要将数组转换为实数。 绘制新数组后,我们可以看到轴刻度是其大小的两倍。 而且,我们几乎不会丢失任何细节或图像模糊。 已使用傅立叶变换对图像进行插值。
# 摘要
# 总结
在本章中,我们介绍了一维和多维傅立叶变换的用法以及它们在信号处理中的应用方式。 现在,您了解了 NumPy 中离散傅立叶变换的实现,并且我们在手动实现的脚本与 NumPy 内置模块之间进行了性能比较。
......
......@@ -135,7 +135,7 @@ else:
.....
.....
.....
***For full sample look for setup.py file with the accompanying CD***
For full sample look for setup.py file with the accompanying CD
.....
.....
......@@ -208,7 +208,7 @@ if __name__ == "__main__":
可以按以下方式测试安装文件:
```py
**$ python <setup.py file> build_src build_ext --help**
$ python <setup.py file> build_src build_ext --help
```
......@@ -248,12 +248,12 @@ if __name__ == "__main__":
最后,您可以通过执行以下操作在 PyPI 上上传您的发行版:
```py
**$ python setup.py sdist upload**
$ python setup.py sdist upload
```
希望,如果您正确键入了所有内容,您的应用程序将被打包并在 PyPI 上供世界使用。
# 摘要
# 总结
在本章中,我们介绍了用于打包和分发应用程序的工具。 我们首先看了一个更简单的`setup.py`文件。 您研究了功能设置的属性以及这些参数如何链接到最终安装程序。 接下来,我们添加了与 NumPy 相关的代码,并添加了一些异常处理代码。 最后,我们构建了安装程序并学习了如何在 *Cheese Shop*(PyPI 网站)上上传它。 在下一章中,您将研究通过将 Python 代码的一部分转换为 Cython 来进一步加速 Python 代码的方法。
\ No newline at end of file
......@@ -33,15 +33,15 @@ Cython 是一个将类型定义的 Python 代码转换为 C 代码的编译器
第二步是安装 Cython。 Cython 与其他带有 Python 模块的库一样,可以使用任何首选的方法(pip,easy_install 等)进行安装。 完成这两个步骤后,您可以通过尝试从 Shell 调用 Cython 来测试设置。 如果收到错误消息,则说明您错过了第二步,需要重新安装 Cython 或从 Cython 官方网站( [http://cython.org/#download](http://cython.org/#download) )下载 TAR 归档文件,然后 从此下载的`root`文件夹中运行以下命令:
```py
**python setup.py install**
python setup.py install
```
正确完成所有操作后,您可以继续使用 Cython 编写第一个程序。
# Cython 中的 Hello world
# Cython 中的 Helloworld
Cython 程序看起来与 Python 程序非常相似,但大多带有附加的类型信息。 让我们看一个简单的程序,该程序计算给定`n` *n* <sup class="calibre26"></sup>斐波那契数:
Cython 程序看起来与 Python 程序非常相似,但大多带有附加的类型信息。 让我们看一个简单的程序,该程序计算给定`n``n`斐波那契数:
```py
defcompute_fibonacchi(n):
......@@ -63,7 +63,7 @@ intermediate = a
让我们研究一下该程序,以了解在调用带有某些数字输出的函数时幕后的情况。 假设`compute_fibonacchi(3)`
众所周知,Python 是一种解释性和动态语言,这意味着您无需在使用变量之前声明变量。 这意味着在函数调用开始时,Python 解释器无法确定`n`将保留的值的类型。 当您使用某个整数值调用函数时,Python 会通过名为 **boxing****unboxing** 的过程自动为您进行类型推断。
众所周知,Python 是一种解释性和动态语言,这意味着您无需在使用变量之前声明变量。 这意味着在函数调用开始时,Python 解释器无法确定`n`将保留的值的类型。 当您使用某个整数值调用函数时,Python 会通过名为**装箱****拆箱**的过程自动为您进行类型推断。
在 Python 中,一切都是对象。 因此,当您输入`1``hello`时,Python 解释器将在内部将其转换为对象。 在许多在线材料中,此过程也称为拳击。 该过程可以可视化为:
......@@ -219,6 +219,6 @@ cmdclass={'build_ext': build_ext}
5. 使用以前的测试设置进行测试。
6. 将扩展名添加到安装文件中。
# 摘要
# 总结
在本章中,我们了解了如何将 Python 代码隐蔽到 Cython 中。 我们还研究了一些涉及 NumPy 数组的示例 Python 代码。 我们简要介绍了 Python 语言中装箱和拆箱的概念以及它们如何影响代码性能。 我们还说明了如何显式解锁臭名昭著的 GIL。 为了进一步深入研究 Cython,我们建议*学习 Cython 编程**Philip Herron**Packt Publishing* 。 在下一章中,您将了解 NumPy C API 以及如何使用它。
\ No newline at end of file
在本章中,我们了解了如何将 Python 代码隐蔽到 Cython 中。 我们还研究了一些涉及 NumPy 数组的示例 Python 代码。 我们简要介绍了 Python 语言中装箱和拆箱的概念以及它们如何影响代码性能。 我们还说明了如何显式解锁臭名昭著的 GIL。 为了进一步深入研究 Cython,我们建议《Cython 编程学习手册》,*Philip Herron**Packt Publishing*。 在下一章中,您将了解 NumPy C API 以及如何使用它。
\ No newline at end of file
......@@ -270,6 +270,6 @@ python setup.py build_ext -inplace
```
# 摘要
# 总结
在本章中,我们向您介绍了另一种使用 Python 和 NumPy 提供的 C-API 优化或集成 C/C++ 代码的方法。 我们解释了该代码的基本结构以及其他示例代码,开发人员必须编写这些代码才能创建扩展模块。 之后,我们创建了两个函数,这些函数计算出一个数字的平方,并将该平方函数从`math.h`库映射到一个 Numpy 数组。 这里的目的是使您熟悉如何利用 C/C++ 编写的数字库,以最少的代码重写来创建自己的模块。 编写 C 代码的范围比这里描述的要广泛得多。 但是,我们希望本章使您有信心在需要时利用 C-API。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册