学习python一段时间,numpy,pandas,matplotlib等这些包同房在学,经常将他们的函数混淆,所以将之前学过的,和用到过的归类整理出来,整理知识
一、多维数组对象
1. 1numpy的多维数组ndarray
1.1.1 创建数组
一维数组:arr1 = np.array([1,2,3,4])
二维数组:arr2 = np.array([[1,2,3,4],[5,6,7,8]])
查看数组的维数:arr2.ndim
查看数组形状:arr2.shape
查看数组元素类型:arr2.dtype
1.1.2 其他创建数组方法:
np.zeros(10)
np.zeros((3,6))
np.empty((2,3,4)) #返回的是一些未初始化的垃圾值
1.1.3 函数
- array()
- asarray()
- arange()
- ones()/ones_like()
- zeros()/zeros_like()
- empty()/empty_like()
- eye()/identity() # 创建一个正方的N*N单位矩阵(对角线为1,其余为0)
1.2. ndarry的数据类型
1.2.1 创建时指定dtype
arr1 = np.array([1, 2, 3,4], dtype = np.float)
1.2.2 使用astype()方法显式的转换dtype
float_arr = arr.astype(np.float64)
另一种方法:
arr1的数据类型为int, arr2的数据类型为float
将arr2的数据类型转换为和arr1一样:
arr2.astype(arr1.dtype)
1.3. 数组和标量之间的运算
1.3.1标量与数组的运算会传播到整个数组
- 大小相同的数组间的运算会应用到元素级
arr = [[1,2,3,4],[5,6,7,8])
arr * arr #对应位置数据相乘
arr - arr
1/arr
arr**0.5 - 大小不同的数组间运算叫广播
1.4 索引和切片
1.4.1 基本索引和切片
- 一维数组
arr = np.arange(10)
- arr[5]
- arr[5:8]
- arr[5:8] = 12 #切片赋值
!切片得到的是视图,更改会体现在源数据上
eg:
arr_slice = arr[5:8]
arr_slice = 64
对arr_slice赋值,也会体现在arr[5:8]上
!可以进行显式的复制操作
eg:arr_slice = arr[5:8].copy()
- 二维数组
arr2d = np.array([[1,2,3], [4,5,6],[7,8,9]])
- arr2d[2]
- arr2d[0][2]
- 三维数组
略
1.4.2 切片索引
- arr2d[:2] #沿第0轴切片
- arr2d[:2, 1:]
1.4.3 布尔索引
data 为一个多维数组
data[[布尔数组]]
- 布尔数组用于组索引
- 返回布尔值为1的元素
- 布尔数组的长度与被索引轴长度一致
1.4.3 花式索引
- 利用整数数组进行索引
arr[[1,3,5]]
- 选择arr数组的1,3,5行(从0开始)
arr[[-3, -5, -7]]
- 负数表示从末尾开始选行,倒数3,5,7行(从1开始)
arr[[1,3,5],[2,4,6]]
- 选择的是元素(1,2),(3,4),(5,6),得到的是一个一维数组,而不是一个矩阵
arr[[1,3,5]][:, [2,4,6]]
- 得到1,3,5行的2,4,6列数据,一个3X3矩阵
- 或者使用函数:np.ix_()
arr[np.ix_([1,3,5],[2,4,6])]
1.5 数组的转置和轴对换
1.5.1 转置 (返回的是源数据视图)
二维数组:arr.T#轴对换
高维数组:arr.transpose((1,0,2))
二、通用函数
2.1 一元函数
np.abs()
np.sqrt() # 平方根
np.square() #平方
......
2.2 二元函数
np.add() # 将数组对应元素相加
np.subtract() # 从第一个数组中减去第二个数组中的元素
......
三、利用数组进行数据处理
3.1 将条件逻辑表述为数据运算
np.where( cond, x, y)
等价于:x if condition else y
条件为1时返回x, 条件为0时返回y
3.2 数学和统计方法
- 两种方法:函数调用:np.mean(arr) /对象方法:arr.mean()
- 统计函数:np.sum()、np.std()、np.var().....
- 最小(大)元素索引:np.argmin()/np.argmax()
- 累计和/积:np.cumsum() / cumprod()
3.3 用于布尔型数组的方法
布尔值会被转换位1,0 ,所以用sum()来对布尔型数组计数
- bools.any() 测试数组中是否存在一个或多个True
- bools.all()数组中的所有值是否都为True
3.4 排序
多维数组可以在任何一个轴上进行排序,只需将轴编号传给sort()
- arr.sort() 就地排序,会改变数组本身
- np.sort() 顶级方法,返回数组的副本
3.5 集合逻辑
- np.unique(x) 返回x中的唯一元素,并有序返回结果
- np.intersect1d(x,y)计算x,y中的公共元素,并返回有序结果
- union1d(x,y) 计算x,y中的并集,并返回有序结果
......
四、用于数组的文件输入输出
np.save('文件名', arr) #将arr数组保存到磁盘上.npy文件
np.load('文件名.npy')
np.savez('file.npz', arr1, arr2)# 多个数组压缩保存到一个压缩文件中
五 线性代数
np.linalg中有一组标准的矩阵分解运算以及求逆、行列式等
- 矩阵乘法:
x, y 为两个二矩阵
x.dot(y) 相当于 np.dot(x, y)
......
六、随机数生成
np.random模块对python内置的random进行补充
- seed 随机数生成器种子
- rand 产生均匀分布的样本值
- randint 从给定范围随机选取整数
- randn 产生标准正态分布的样本值
- normal 产生正态分布样本值
- binomial 产生二项分布样本值