Numpy
numpy: Numerical Python
高级科学计算和数据分析的基础包
常见功能1:
- ndarray, 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
- 线性代数、随机数生成以及傅里叶变换功能
- 用于集成由C、C++、Fortran等语言编写的代码的工具
numpy 导入
import numpy as np
大家约定俗成会使用别名np
ndarray
ndarray就是N维数组,但其中元素都为同类型。计算时都是标量元素间的运算
创建ndarray
- 使用array方法,数据类型保存在dtype对象中
- arrange(),类似于range(),只不过返回ndarrary
- ones(),ones_like() 可创建全1的数组,前者参数放指定长度的元组,后者参数放另一个数组,one_like()形状和指定数组相同,只不过全1
- zeros(), zeros_like() 可创建全0数组,用法同上
- eye(), identity() 可创建N × N单位矩阵
ndarray类型转换
astype()
*将浮点数转换成整数时,小数部分会被截断
还可以使用如下:
arr.astype(arr2.dtype) #拷贝了另个ndaray的类型
索引和切片
用法和列表类似
与列表不同点:
列表通过listname[ : ]可以返回列表副本
但naddary数组切片是原始数组的视图,不会被复制,视图上的任何修改都会直接反应到源数组上。
如要进行副本操作,需要用arr.copy()
列表基本操作可参考上一篇博:: 【Python_003】基础语法之列表
运算
ndarray 运算都是元素间的运算,不需要用for loop
普通数组运算:
用加号只是把两个数组简单的拼接在一起。
若要把数组中对应位置的元素相加,则需要用到for loop(如图所示),数据量一大就会又慢又卡
但如果使用ndarray就非常简单了。简单快速可读性还高
再介绍一个 np.where, 和if…else…效果差不多 但比较简洁
如图,有两个数组a,b, 还有个用来当条件的数组cond,cond中类型为boolean。当cond中为True时,取a数组,否则取b数组。
np.where() 只需要一行代码搞定
result = np.where(cond,a,b)
其中a,b不一定需要是数组,标量也行,cond也可以是显式的表达式,如 arr>0, arr == 1 ,etc…
唯一化
np.unique() 可以对列表进行去重,可理解为SQL中的distinct。返回的列表会经过排序
np.unique(arr) 等价于 sorted(set(arr))
集合运算
方法 | 说明 |
---|---|
intersect(x,y) | 计算x和y中的公共元素(交集),并返回有序结果 |
union1d(x,y) | 计算x和y的并集,并返回有序结果 |
in1d(x,y) | 得到一个表示 “x的元素是否在y中” 的boolean数组 |
setdiff1d(x,y) | 集合的差,在x中但不在y中的元素 |
来源:《利用Python进行数据分析》 ↩︎