一、numpy概述
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
基本功能:
快速高效的多维数组对象ndarray
用于对数组执行元素级计算以及直接对数组执行数学运算的函数
用于读写硬盘上基于数组的数据集的工具
线性代数运算、傅里叶变换、以及随机数生成
用户将c、c++、Fortran代码集成到Python的工具
除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器
二、创建ndarray数组
ndarray:N维数组对象(矩阵),所有元素必须是相同类型。
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型。
创建ndarray数组函数:
三、指定ndarray数组元素的类型
NumPy数据类型:
四、ndarray的矢量化计算
矢量运算:相同大小的数组键间的运算应用在元素上
矢量和标量运算:“广播”— 将标量“广播”到各个元素
五、ndarray数组的基本索引和切片
切片就是使用数组的索引将数组切分为多个数组
一维数组的索引:与Python的列表索引功能相似
多维数组的索引:
arr[r1:r2, c1:c2]
arr[1,1] 等价 arr[1][1]
[:] 代表某个维度的数据
1 importnumpy as np2
3 arr = np.array([[1,2],[3,4],[5,6],[7,8]])4 print('获得大于等于0,小于3的元素:',arr[0:3])5 print('获得对应索引的数据:',arr[1,1])6 print('获得对应索引的数据:',arr[0:2,0:1])7
8 结果:9 获得大于等于0,小于3的元素: [[1 2]10 [3 4]11 [5 6]]12 获得对应索引的数据: 4
13 获得对应索引的数据: [[1]14 [3]]
六、ndarray数组的布尔索引和花式索引
布尔索引:使用布尔数组作为索引。arr[condition],condition为一个条件/多个条件组成的布尔数组。
花式索引:使用整型数组作为索引。
1 importnumpy as np2
3 #布尔索引
4 arr = np.array([[1,2],[3,4],[5,6],[7,8]])5 bl_arr =np.array([True,False,True,True])6 print('获得对应布尔索引的数据:',arr[bl_arr,0:1])7
8 #花式索引
9 arr = np.array([[1,2],[3,4],[5,6],[7,8]])10 bl_arr = np.array([1,2,1,1])11 print('获得对应花式索引的数据:',arr[bl_arr==1,0:1])12
13 结果:14 获得对应布尔索引的数据: [[1]15 [5]16 [7]]17 获得对应花式索引的数据: [[1]18 [5]19 [7]]
七、ndarray数组的转置和轴对换
数组的转置/轴对换只会返回源数据的一个视图,不会对源数据进行修改。
1 importnumpy as np2
3 arr = np.arange(12).reshape((3, 2, 2))4 print ('矩阵',arr)5 print ('转置矩阵',arr.T)6 print ('第0个和第1个坐标互换',arr.transpose((1, 0, 2)))7 print ('直接交换第0和第1个坐标',arr.swapaxes(0, 1))8
9 结果:10 矩阵 [[[ 0 1]11 [ 2 3]]12
13 [[ 4 5]14 [ 6 7]]15
16 [[ 8 9]17 [10 11]]]18 转置矩阵 [[[ 0 4 8]19 [ 2 6 10]]20
21 [[ 1 5 9]22 [ 3 7 11]]]23 第0个和第1个坐标互换 [[[ 0 1]24 [ 4 5]25 [ 8 9]]26
27 [[ 2 3]28 [ 6 7]29 [10 11]]]30 直接交换第0和第1个坐标 [[[ 0 1]31 [ 4 5]32 [ 8 9]]33
34 [[ 2 3]35 [ 6 7]36 [10 11]]]
八、ndarray通用函数
通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。
一元ufunc:
二元ufunc:
九、NumPy的where函数使用
np.where(condition, x, y),第一个参数为一个布尔数组,第二个参数和第三个参数可以是标量也可以是数组。
1 importnumpy as np2
3 x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])4 y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])5 cond =np.array([True, False, True, True, False])6 result = [(x if c else y) for x, y, c in zip(x_arr, y_arr, cond)] #通过列表推到实现
7 print(result)8 print(np.where(cond, x_arr, y_arr))9
10 结果:11 [1.1, 2.2, 1.3, 1.4, 2.5]12 [1.1 2.2 1.3 1.4 2.5]
十、ndarray常用的统计方法
可以通过这些基本统计方法对整个数组/某个轴的数据进行统计计算。
用于布尔数组的统计方法:
sum : 统计数组/数组某一维度中的True的个数
any: 统计数组/数组某一维度中是否存在一个/多个True
all:统计数组/数组某一维度中是否都是True
使用sort对数组/数组某一维度进行就地排序(会修改数组本身)。
十一、ndarray数组的去重以及集合运算
十二、numpy中的线性代数
import numpy.linalg 模块。线性代数(linear algebra)
常用的numpy.linalg模块函数:
十三、numpy中的随机数生成
import numpy.random模块。
常用的numpy.random模块函数: