python之基础numpy库使用(二)
来源:互联网 发布:软件过程成熟度cmm 编辑:程序博客网 时间:2024/06/05 15:58
接着第一篇的内容,下面介绍numpy中的一些通用函数(ufunc)的使用,它们可以实现快速的元素级操作以及利用数组进行数据处理
一、通用函数
(1)一元函数
Sqrt(开根号),exp(e指数)
In[13]: arr=np.arange(4)In[14]: np.sqrt(arr)Out[14]: array([ 0. , 1. , 1.41421356, 1.73205081])In[15]: np.exp(arr)Out[15]: array([ 1. , 2.71828183, 7.3890561 , 20.08553692])
(2)二元函数
如add,maximu等
In[17]: x=np.random.randn(4)In[18]: y=np.random.randn(4)In[19]: xOut[19]: array([-0.09464057, -1.09566782, -0.16559557, -1.22366449])In[20]: yOut[20]: array([-1.14346377, 0.94896985, 0.63510828, -0.70507939])In[21]: np.add(x,y)Out[21]: array([-1.23810434, -0.14669797, 0.46951271, -1.92874387])In[22]: np.maximum(x,y)Out[22]: array([-0.09464057, 0.94896985, 0.63510828, -0.70507939])
下表列出了一些常见的一元,二元ufunc
一元ufunc:
二元ufunc:
二、利用数组进行数据处理
Numpy可以使你将许多数据处理任务表达式简化为数组表达式(否则需要编写循环),这种做法,通常称为矢量化。
(1)将条件逻辑表述为数组运算(np.where)
np.where是三元表达式x if condition c else y的矢量化表示,如下所示:
In[23]: x=np.arange(4)In[24]: y=np.arange(6,10,1)In[25]: cond=np.array([True,False,False,True])In[26]: xOut[26]: array([0, 1, 2, 3])In[27]: yOut[27]: array([6, 7, 8, 9])
假设我们根据cond选择x,y的值,用列表推导式要如下写:
In[28]: result=[(a if c else b ) for a,b,c in zip(x,y,cond)]In[29]: resultOut[29]: [0, 7, 8, 3]
这有两个问题,一是对大数组的处理速度不是很快,因为都是由纯python完成的,而是不能处理多维数组,
使用np.whrere则非常简单:
In[30]: result=np.where(cond,x,y)In[31]: resultOut[31]: array([0, 7, 8, 3])
np.where的第二个,第三个参数不必是数组,可以是标量值。它常用来根据一个数组生成另一个数组。Eg:假设有一个随机数组,希望将正数替换为2,负数替换为-2,那么可以这么写:
In[34]: arr=np.random.randn(4,4)In[35]: arrOut[35]: array([[-0.23423085, 0.56603778, 2.41838068, -1.53304005], [ 0.24527869, 0.98127126, -1.29478977, -0.07787282], [ 0.79075936, -1.10094307, -0.37013976, 1.14196413], [-0.38953183, -1.93298157, 0.2568553 , 0.66253162]])In[36]: result=np.where(arr>0,2,-2)In[36]: result=np.where(arr>0,2,-2)In[37]: resultOut[37]: array([[-2, 2, 2, -2], [ 2, 2, -2, -2], [ 2, -2, -2, 2], [-2, -2, 2, 2]])
传递给where的数组大小可以不相等
In[41]: cond1=np.array([True,False,True])In[42]: cond2=np.array([True,False,True])In[43]: result=np.where(cond1&cond2,1,np.where(cond1,2,np.where(cond2,3,4)))In[44]: resultOut[44]: array([1, 4, 1])
大家可以想想要实现这个用if-else需要写多少行代码
(2)数学和统计方法均值、方差、求和等运算
In[45]: arr=np.random.randn(4,4)In[46]: arr.mean()Out[46]: 0.023586723164668873In[47]: arr.sum()Out[47]: 0.37738757063470196
Mean和sum这类函数可以接受axis参数,用于计算该轴上的统计值,返回的结果少一维
说明一下,axis=0表示纵向计算,axis=1表示横向计算
array([[ 0.53736842, -2.01617125, -0.26598267, -0.11424592], [ 0.23105824, -0.35664911, -0.3302801 , 0.80088503], [-0.89317546, 1.73113602, 1.56051572, 0.40903232], [ 1.55380977, -1.01639561, -1.43964005, -0.01387776]])In[51]: arr.mean(axis=1)Out[51]: array([-0.46475786, 0.08625351, 0.70187715, -0.22902591])In[52]: arr.sum(axis=1)Out[52]: array([-1.85903143, 0.34501405, 2.8075086 , -0.91610365])下表列出了基本的统计函数:
计数:
In[62]: arr=np.random.randn(100)In[63]: (arr>0).sum() #计算正值的数量Out[63]: 54
另外还有两个方法any 和all ,前者用来测试数组中是否存在一个或多个True,后者用来测试是否都是True
In[7]: bools=np.array([True,False,True,False])In[8]: bools.any()Out[8]: TrueIn[9]: bools.all()Out[9]: False
(4)排序
通过sort方法进行排序
array([ 1.52561448, -0.40076737, -0.35224861, 1.3611128 , -0.34397678, 0.72943324, 0.72299746, 0.96120321, -1.03709975, -1.01976425])In[19]: arr.sort()In[20]: arrOut[20]: array([-1.03709975, -1.01976425, -0.40076737, -0.35224861, -0.34397678,
这儿啰嗦两句,产生随机数可以用random库,也可以用numpy库,后者更强大一些,例如:
In[21]: arr=np.arange(10) #直接产生随机整数In[22]: arrOut[22]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In[23]: np.random.shuffle(arr) #打乱数组,类似于洗牌In[24]: arrOut[24]: array([5, 8, 6, 3, 9, 2, 1, 7, 4, 0])In[25]: np.random.permutation(10) #直接产生一个随机数组Out[25]: array([2, 9, 4, 5, 1, 7, 3, 0, 8, 6])(5)一些其他的常用函数
(6)数组的文件输入输出
np.save与np.laod是读写磁盘数组数据的两个主要函数,文件格式为.npy
In[26]: arr=np.arange(10)In[27]: np.save('arr_data',arr) #文件名没有加.npy时会自动补上,但读取数必须加上In[28]: np.load('arr_data.npy')Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Ps:Np.savez可以将多个数组以压缩文件的格式保存,格式为npz
In[29]: np.savez('data',a=arr,b=arr)In[30]: data=np.load('data.npz')In[31]: data['a']Out[31]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In[32]: data['b']Out[32]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])(7)存取文本文件
主要函数是np.loadtxt()与np.savetxt(),此外还有np.genformtxt(),函数的主要参数有文件名,分隔符号,跳过的行数等,下面以np.savetxt()为例说明:
array([[-0.44397662, 0.67687121, 1.58190068], [ 0.76849295, -2.02349839, -0.6229177 ], [-0.8254104 , -0.27689501, 1.42820222]])In[6]: np.savetxt('arr.txt',arr)
文件保存在你编辑器的项目文件夹里面
- python之基础numpy库使用(二)
- python之基础numpy库使用(一)
- python之基础numpy库使用(三)
- python numpy基础(二)random基本使用
- python基础之numpy
- Python基础-numpy使用
- python笔记之NUMPY(二)
- python之Numpy使用
- Python数据分析基础(二)——NumPy基础
- python学习之NumPy基础
- 利用Python数据分析:Numpy基础(二)
- Python 机器学习基础(二)——Numpy
- NumPy使用(二)
- python库之numpy
- Python之NumPy库
- Python之Numpy库
- python之Numpy的使用
- Python之numpy教程(二):运算、索引、切片
- Shiro(3) controller中获取当前登录用户信息
- NIO入门
- JavaFast技术特点介绍-企业级JAVA快速开发平台, 内置java代码生成器
- ++i与i++的区别
- TypeScript学习之WebStorm(1)
- python之基础numpy库使用(二)
- PTA 6-7 哈利·波特的考试(dijkstra)
- 解决Ubuntu/LInux QT5.8(QTCreater4.1)不能输入中文问题
- Java克隆(Clone)的应用
- python机器学习(2:KNN算法)
- 直通BAT--数据结构与算法六(二分搜索)
- 四种常见的 POST 提交数据方式
- STL学习笔记6— —容器forward_list
- 【DL--03】深度学习基本概念—张量