购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 NumPy的使用

NumPy 是高性能科学计算和数据分析的基础包,是本章接下来要讲解的 Pandas、Scikit-Learn、StatModels等库的构建基础。NumPy的主要功能在第1章中已经有所介绍,对于一般的金融数据分析而言,其大部分功能可由更高级的 Pandas 实现。我们并不需要在学习NumPy上花费过多精力,但是回过头来深入学习NumPy可以帮助我们更好地理解面向数组编程的思维方式。

在本书中对NumPy的引入约定为:

In [1]:import numpy as np

因此,一旦在代码中看到np,就是使用了NumPy。

3.1.1 多维数组ndarray

NumPy 的主要对象是 ndarray,该对象是一个快速、灵活的大数据容器。在此需要注意,在ndarray与Python中内置的list、tuple并不相同:在Python中,元素的数据类型可以不同;而在ndarray中,所有元素的数据类型必须相同。

首先,我们利用NumPy中的array函数创建一个一维ndarray:

等长序列组成的列表将会被转换为一个多维数组:

除了np.array函数,还有其他函数可以快速创建数组:

3.1.2 ndarray的数据类型

dtype代表ndarray中元素的数据类型,数据类型有很多,对于新手来说,要全部记住这些数据类型是十分困难的。不过没有关系,在大部分数据分析工作中,我们只需要知道float(浮点数)、int(整数)、bool(布尔值)、string_(字符串)、unicode_就可以了。若想了解更多的数据类型,则可以查阅NumPy的文档。

接下来举几个例子,代码如下:

在不同的数据类型之间也能互相转换:

3.1.3 数组索引、切片和赋值

索引切片的操作类似于Python的内置函数list,只不过是从一维拓展到多维而已。首先,我们创建一个3×3的ndarray:

需要注意的是,在将一个标量赋值给一个切片时,该值会被广播到整个切片视图上,并直接对源数组进行修改。如果我们想避免改变源数组,则可以使用copy函数:

3.1.4 基本的数组运算

ndarray 的一大特色就是可以将代码向量化。所谓向量化,就是对一个复杂的对象进行整体操作,而不是对其中的单个元素进行循环。NumPy 的大部分代码都是由 C 语言编写的,并且进行了高度优化,这大大加快了计算速度。

简单的数学运算可以直接在ndarray上运行,例如:

在 NumPy 中还有一些内置的数学函数,可以帮助我们快速地对数据进行统计计算,比如sum、max、mean、std等。

表3-1列出了基本的数组统计方法。

表3-1 基本的数组统计方法

我们也可以自定义函数,再将其传入ndarray中:

3.1.5 随机数

NumPy还可以用来生成伪随机数,负责这一功能的是其子库numpy.random。

首先,导入 numpy.random。为了更直观地展示随机数的生成过程,这里同时导入了Matplotlib,以将结果可视化:

例如,npr.rand函数可以用来生成[0,1)的随机多维数组:

稍微开动一下大脑,就可以将随机区间转化为[2,4):

表3-2展示了生成简单随机数的函数及其参数和描述。

表3-2

然后,对表3-2中部分函数生成的随机数进行可视化,效果如图3-1所示。

图3-1

许多金融模型,例如 BSM 模型、跳跃扩散模型、平方根扩散模型等,都依赖于正态分布。我们可以通过生成相应的随机数,来将原本连续的金融模型离散化,从而进行近似模拟。在npr.random模块中内置了很多分布函数,这里限于篇幅不再全面展示,感兴趣的读者可以自行查阅NumPy的文档。

作为例子,我们将如下分布的随机数进行可视化。

(1)n=100、P=0.3的二项分布。

(2)均值为10、标准差为2的正态分布。

(3)自由度为0.5的卡方分布。

(4)λ为2的泊松分布。

相应的代码如下:

其可视化效果如图3-2所示。

图3-2 4XgcZvlY5nq8H1i8nMEgRRme1eN2H5/ZWGm4J5NKG6+B9Z+8HioVZLt/6GEYE25g

点击中间区域
呼出菜单
上一章
目录
下一章
×