Python Numpy进阶

来源:互联网 发布:什么是java可变参数 编辑:程序博客网 时间:2024/06/05 02:41

Python Numpy进阶

环境:python3.5

推荐两本书:《线性代数》、《利用python进行数据分析》

需要的库:

  • matplotlib快速绘图

  • scipy

  • numpy

对于大部分数据分析应用而言,最常用我最关注的功能集中在:

  1. 用于数据整理和清理、子集构造和过滤、转换等快速的矢量化数组运算。

  2. 常用的数组算法,如排序、唯一化、集合运算等。

  3. 高效的描述统计和数据聚合/摘要运算。

  4. 用于异构数据集的合并/链接运算的数据对齐和关系型数据运算。

  5. 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)。

  6. 数据的分组运算(聚合、转换、函数应用等)。

Numpy则提供了上述功能的计算基础。

基础篇

Np入门

进阶篇

进阶本质上就是对基础功能的实用化,讲起来比较琐碎。

数据处理

Numpy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)。用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化数组运算比等价的纯python方式快上一两个数量级(甚至更多),尤其是各种数值运算。

比如说:

一、 条件逻辑

numpy.where在三元条件表达式if condition else y的矢量化版本。假设我们有一个布尔数组和两个值数组:

#举例:xarr=np.array([1.1,1.2,1.3,1.4,1.5])yarr=np.array([2.1,2.2,2.3,2.4,2.5])zarr=np.array([True,False,True,True,False])result=[(x if c else y)for x,y,c in zip(xarr,yarr,zarr)]print(result)result=np.where(zarr,xarr,yarr)print(result)
#结果:[1.1000000000000001, 2.2000000000000002, 1.3,1.3999999999999999, 2.5][ 1.1  2.2  1.3  1.4  2.5 ]

从结果看,两者结果一致。
从使用角度看,np.where更简单,从而能引申出更复杂的逻辑。
np.where(cond1%cond2,0,np.where(cond1,1,np.where(cond2,2,1)))
从性能角度看,纯python循环对大数据处理速度不是很快,且无法用于多维数组。np.where则可以实现。

二、数学统计

  • arr.sum
  • arr.mean
  • arr.std
  • arr.min
  • arr.cumprod 所有元素的累计积!特别有用!

三、排序、唯一化以及其他的集合逻辑

#排序arr=np.array(...)arr.sort()
#唯一化等集合逻辑np.unique(arr)           #计算x中的唯一元素,并返回有序结果np.intersect1d(x,y)      #计算x和y中的公共元素,并返回有序结果np.union1d(x,y)          #计算x和y中的并集,并返回有序结果np.setdiff1d(x,y)        #计算集合的差

四、用于数组的文件输入输出

一般情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。

arr=np.arange(10)np.save('arrar',arr)brr=np.load('arrar.npy')

五、线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其方阵数学等)是任何数组库的重要组成部分。

diag                  #求取对角线元素dot                   #矩阵乘法trace                 #对角线元素和==sum(diag(arr))det                   #行列式inv                   #矩阵逆solve                 #解线性方程 Ax=b

六、随机函数

对于np.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。我想举个例子:

#随机漫步nsteps=1000draws=np.random.randint(0,2,size=nsteps)steps=np.where(draws>0,1,-1)walk=steps.cumsum()plt.plot(np.arange(start=0,stop=1000,step=1),walk)plt.show()

总结

笔者介绍了在numpy基础上的一些进阶功能,还有很多需要读者去挖掘。数据分析更有用更有趣的方法还属后续的pandas,pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。

如果您看到这篇文章有收获或者有不同的意见,欢迎点赞或者评论。python:190341254丁。
原创粉丝点击