金融量化分析---NumPy

NumPy是Python数值计算最重要的基础包,提供了以下功能(不限于此)

快速高效的多(duo)维数组对象ndarray。
用于对数组执行元素级计算以及直接对数组执行数学(xue)运算的函数。
用于读写硬盘上基于数组的数据集的工具。
线性代数运算、傅里叶变换,以及随机数生成。
成熟的C API, 用于Python插件和原生C、C++、Fortran代码访问	NumPy的数据结构和计算工具。

NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。这是因为:

NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期工作。比起Python的内置序列,NumPy数组使用的内存更少。
NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。

1.1 NumPy引入方式
NumPy使用的内存更小,运算效率也更高,我们来比较一下NumPy和Python自带的列表的性能:

在这里插入图片描述

NumPy比Python自带的列表快了一个数量级。

1.2ndarrary:多(duo)维数组对象
多(duo)维数组对象ndarray是一个快速而灵活的数据集容器。我们可以利用这种数组对整块数据执行一些数学(xue)运算,其语法跟标量元素之间的运算一样。
在这里插入图片描述
**ndarray是一个通用的同构数据多(duo)维容器,也就是说,其中的所有元素必须是相同类型的。**每个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象):
在这里插入图片描述
在这里插入图片描述
1.2.1 创建ndarray
创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。

在这里插入图片描述
np.array会尝试为新建的这个数组推断出一个较为合适的数据类型。

嵌套序列(比如由一组等长列表组成的列表)将会被转换为一个多(duo)维数组:
在这里插入图片描述
另一个类似的函数是asarray。array和asarray都可以将输入的参数转化为ndarray对象,他们的区别在于当参数为一般的序列时,两个函数结果相同;当参数本身就是ndarray类型时,array会新建一个ndarray对象,作为参数的副本,但是asarray不会新建,而是在原地操作,与参数共享同一块内存。

在这里插入图片描述
一些函数也可以新建特定的数组:zeros可以创建指定长度或形状的全0数组,ones可以创建指定长度或形状的全1数组,empty可以创建一个没有任何具体值的数值。对于这些函数,输入参数为一维数组的长度,或者一个表示形状的元组:
在这里插入图片描述
注意:np.empty不需要初始化数组,因此速度比较快。在很多情况下,它返回的都是一些未初始化的垃圾值。

类似range函数,我们也可以利用NumPy中的arange函数生成一组数据。
在这里插入图片描述
1.2.1 ndarray的数据类型
ndarray的数据类型dtype可以认为是一个特殊的对象,当我们需要将一块内存解读为特定的数据类型时,需要用到dtype中指明的信息。
在这里插入图片描述
由于NumPy主要处理数值计算,因此没有特别指定的时候,数据类型都是float64(浮点数)。

我们可以用ndarray的astype将一个数组从一个dtype转换成另一个dtype:
在这里插入图片描述
将浮点数转换成整数,则小数部分将会被截取删除:
在这里插入图片描述


版权声明:本文为weixin_42220953原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。