Python - 七种武器之NumPy
Python是一个优秀的通用性编程语言,站在AI的风口,光芒四射,更是借助开源流行库(NumPy, SciPy, Matplotlib, Pandas等),成为强大的科学计算,机器学习首选环境。我们今天也来学习一下其七种武器之一的NumPy库。
目录
七种武器
Numpy介绍
Numpy安装
基础结构
函数及操作
高阶功能
Pandas介绍
总结
1 Python的七种武器
官网 https://scipy.org/
Sigh Pie官网展示了Python的用于科学计算,统计分析,机器学习用途的开源武器:
NumPy:多维数组/矩阵基础包,是很多其他包的基石,如Pandas
SciPy: 科学计算基础包
Matplotlib: 快速生成2D图像
IPython: 增强的交互命令行
Sympy: 数学符号计算库,积分,微分,线性代数
Pandas:基于NumPy的数据分析,支持Series, Time-Series, DataFrame, Panel,功能非常强大。
以上六种+Python本身构成了“七种武器”。
2 NumPy介绍
NumPy(NumericalPython Extensions)是一个第三方的开源Python包,用于科学计算,其前身是1995年开始开发的基于一个用于数组运算的库,经过长时间的发展,基本上成了绝大多数Python科学计算的基础包。
NumPy主要操作的对象是同种类型元素的多维数组/矩阵,并提供大量科学计算,尤其是线性代数,简单数学,逻辑,排序,选择,I/O,傅立叶变换,基本统计,随机模拟;而标准Python库中的array.array只提供少量功能。
NumPy:http://www.numpy.org/
官网如下简洁介绍:
强大的N维数组对象及处理
sophisticated (broadcasting) functions 强大的函数功能,broadcasting?
与C++与Fortran集成
线性代数、傅立叶转换和随机数生成函数
NumPy提供了两种基本的对象,ndarray(N-dimensional array object)和ufunc(universal function object)可以对其N维数组进行计算处理.
3 NumPy安装
可以去官网下载适合wheels,并在Python环境中进行安装。
https://pypi.python.org/pypi/numpy
![](https://img.haomeiwen.com/i2142665/51286690149f9116.gif)
![](https://img.haomeiwen.com/i2142665/1fc5506189b8e3ac.png)
安装后简单在Python的命令行环境IDLE中运行:
![](https://img.haomeiwen.com/i2142665/2831330ab0069f9d.gif)
![](https://img.haomeiwen.com/i2142665/6e618fd824b84b6f.png)
4 基础结构
多维数组ndarray
NumPy的主要对象是同质多维数组,矩阵。所为同质即其所有元素的类型都相同。其中维度称作轴axes,轴的数目称为秩rank。
ndarray.ndim:数组维度的数量,rank ,如2维数组的rank = 2;
ndarry.shape :数组的维度,对于n行m列的矩阵,shape则是(n,m), 所以shape元组的长度即是rank
ndarry.size:多维数组总个数,如2*3矩阵size=6
如下面在PyCharm CE下面的示例:
![](https://img.haomeiwen.com/i2142665/bb792e152087e5c8.gif)
![](https://img.haomeiwen.com/i2142665/9825a967a77cafca.png)
首先通过arange(15)个数,并reshape成3*5矩阵,所以其对应shape为(3,5),维度为2维,矩阵,size为3*5=15;
内存结构
多维数组的内存结构分为两大对象,一块用来保存数据区域,一块用来描述元数据类型的dtype
![](https://img.haomeiwen.com/i2142665/1cd21e260bffa196.gif)
![](https://img.haomeiwen.com/i2142665/6a88e90fac0f58d7.png)
多维数组创建
直接从标准数组创建:
b=np.array( [(1,2),(3,4)])
创建复数类型:
zeros:创建全部由0组成的数组
ones:则创建一个由1组成的数组
empty:随机由内存中数据生成
arange:安装指定规则生成
linspace:浮点数生成数组
简单方便,最后linspace则是针对浮点数,参数则是希望得到的元素个数,而非arange中的步长作为参数。
5 函数及操作
数组/矩阵基本操作
对于数组元素级别的操作:
包括数组元素的相减,自己元素*2,或者平方,或者进行判断操作。
同样对于,多维数组/矩阵也同样适用:
对于矩阵的简单基本操作我们已经可以看出NumPy的灵活方便。
对于我们关心的矩阵乘法,则需要使用函数dot
如上,a*b只是简单的对应元素相乘,dot则是真正矩阵乘法。另外,多维数组也支持子操作,如a *= 2;
其他通用函数
其他通用函数同样可以作用于多维数组/矩阵,如sin,cos,exp,average,cov,ceil, transpose等
all: 测试是否True
![](http://upload-images.jianshu.io/upload_images/2142665-1d87deaeeddb9ca0.gif)
类似C语言风格,非零即True
soft:用指定算法对数组进行排序,算法包括了quicksort, mergesort, heapsort等,默认快排序,对于排序算法的性能,参考如下:
总体来说,做到了简单,灵活。
sort甚至可以对结构化数组进行排序:
简直方便到让人流口水。。。
transpose:矩阵转置
6 高阶功能
Broadcasting
Numpy中引入的广播broadcasting用来解决两个形状不同的矩阵阵列如何进行扩展从而可以继续进行数学计算的机制。简单来说,较小的阵列“广播”扩展到较大的阵列相同的形状维度,使得它们可以对等进行输血计算,广播提供过了一种向量化的操作方式,并且Python的广播不需要数据复制,执行效率高效。
具体的广播规则则是让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐:
同样,在矩阵乘法中:
傅立叶变换/分析
傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数或者它们的积分的线性组合,在各个学科中有广泛的应用。
Numpy中包含了标准FFT(一维,一维离散,两维,N维度等),实际FFT等等。这里自动过滤。
下面看一个官网的一维离散傅立叶变换:
![](https://img.haomeiwen.com/i2142665/31ba23b5322d219f.gif)
![](https://img.haomeiwen.com/i2142665/9d61a44d87ee7b7b.png)
运行生成的图像为:
![](https://img.haomeiwen.com/i2142665/737e588753980281.gif)
![](https://img.haomeiwen.com/i2142665/fe245632f4912af1.png)
简单财务函数
Numpy提供了一些简单的金融财务的函数,如计算现值pv,终值fv,贷款利息,收益率等比较基本功能,可以自行查阅API文档。
线性代数
这个应该作为多维数组/矩阵框架的基本款吧?
![](https://img.haomeiwen.com/i2142665/08778f277232f6b5.gif)
![](https://img.haomeiwen.com/i2142665/e1d5180b1b90d192.png)
还有其他计算特征值,范数,行列式,以及求解矩阵方程式或线性标量方程组,最小二乘法,求逆等。
我们来看一下我们感兴趣的最小二乘法吧:
lstsq:求解最小二乘解返回到线性矩阵方程
如 求适合直线,y = mx + c
x = [0, 1, 2, 3]
y = [-1, 0.2, 0.9, 2.1]
![](https://img.haomeiwen.com/i2142665/dacdded0e078a313.gif)
![](https://img.haomeiwen.com/i2142665/1fed760646e4d89f.png)
并且可以用简单代码生成拟合图像:
![](https://img.haomeiwen.com/i2142665/d7d0f475c0601341.gif)
![](https://img.haomeiwen.com/i2142665/914954945458c14e.png)
运行后,生成如下拟合图:
统计/随机抽样
统计与随机分布也是必不可少的函数,包含了随机数据random, sample; 分布beta, binomial, 指数分布,正态分布,泊松分布等等几十种,统计函数如标准方差std,协方差等等。
当然,我们也重点看看我们感(neng)兴(kan)趣(dong)的正态/高斯分布吧:
random.normal(loc, scale, size):高斯分布绘制随机样本
请自行查阅维基百科:http://en.wikipedia.org/wiki/Normal_distribution
我们来看一下吧:
生成的图形如下:
7 Pandas介绍
简单提及一下Pandas, 希望有机会可以学习系统介绍一下。
Pandas是Python的一个数据分析包,由于对时间序列提供了很好的支持,被广泛应用到金融数据分析工具,并且支持多种数据结构,包括Series, DataFrame(类似Spark中的DataFrame),Panel 3维的结构化数据等,并可以进行数据的查询,过滤等分析,并支持2D图像展示。
P.S. 我们最近用户MD大Trader 都开始自己学习用Pandas来进行数据分析,Trading了,与时俱进啊。
8 总结
NumPy作为Python的开源数值计算扩展,可以媲美MatLab来处理存储大型矩阵,并作为其他几种武器之基石,在机器学习的风口上,值得去花时间研究应用,希望我们也有时间继续介绍其他秘密武器,尤其是Pandas。
往期热文推荐
Machine Learning 2 - 非线性回归算法分析
Machine Learning 3 - 主成分(PCA)算法分析
Code Walkthrough - HashMap庖丁解牛
公众号:技术极客TechBooster
孪生公众号:技术 + 金融 = 程序量化投资Venus