NumPy
参考书籍《利用python进行数据分析》,书中有更加全面的介绍,我只介绍点梗概和自己的理解。
实际在对表格数据的处理中,pandas的应用更多,numpy对数据的操作方法并不常用,它提供底层数据结构的作用更大。但是在机器学习时,大多都需要调整数据结构,会用到ndarry的一些方法。
开篇
背景
python本身因为其语言特点,不适合用来做计算密集型任务(相同的计算Python用的时间比Java长,比C长得多)。
python本身的数据结构拿来处理数据问题,也不够简便。
解决方案
- NumPy提供了简便的数据结构基础,之后的python数据分析的包,如pandas、sklearn都需要以NumPy作为底层依赖包
- 底层实现和C结合,优化了处理速度
针对ndarry数据抽象的操作
创建
普通型
- np.array() 方法接收一切可以序列化的对象,将可序列化的对象转化为多维数组
数组属性
- .dtype 数据类型
- .ndim 维度
- .shape 形状
- .reshape((m,n)) 指定为(m,n)形状的新数组
填充型
zeros()
- 10 实际上为(10,0)
- (3,6)
- (2,3,2)
- zeros_like()
- 0,1,空值,指定值填充
- ones() ones_like()
- empyt() empty_like()
- full() full_like()
函数型
- np.array()
- np.asarray()
- np.nrange()
np.eye(), np.identity()
- 特征矩阵,对角线元素为1,其余位置为0
数据类型
dtype:
- init 8,16,32,64位
- unit 无符号整形
- float 16,32,64,128位 , 半精度\标准精度\双精度\拓展精度
- complex
- bool
- string
- object
- unicode_
astype()
- (‘np.float64’) 指定型
- np.dtype 指定和另一个ndarry一样的类型
- 会创建一个新的数组
- 实际上 numpy的数据类型相当智能,有不错的默认识别能力
数组和标量的运算
- 会自动应用到元素级别
切片和索引
切片
- 切片是原始数组的视图,对切片的修改会直接影响到源数组。
- .copy() 生成一个副本切片
- 数组[一维,二维,三维…]
- [:]表示在这个维度上选取所有
布尔索引
- 由 True False组成的具有相同size的数组
布尔条件
- & | != -
花式索引
- 利用整数数组进行索引
- 以特定顺序索引不连续的行列
- 花式索引总是会复制出新的数组
对比:
- arr[[1,5,7,2],[0,3,1,2]] 选出了元素(1,0),(5,3),(7,1),(2,2)
- arr[[1,5,7,2]],[:,[0,3,1,2]]] 选出了由索引1,5,7,2行 0,3,1,2列(0行0列开始)组成的4*4的新数组
数组转换 形状\轴操作
- 重置形状 reshape()
- 矩阵转置 .T
轴重排()
transpose((0,2,1))
- 轴顺序重排
swapaxes(1,2)
- 交换1,2两个轴
特殊函数
一元通用函数
- abs fabs 整数、浮点数、复数的绝对值
- sqrt sqaure 平方根 平方
- sign 符号 得到0 -1 1
- ceil floor (天花板、地板)不小于的最小 不大于的最大
modf
- np.modf(np.array([1.2,3.4])) 返回 (array([0.2, 0.4]), array([1., 3.]))
- 三角函数、对数、有限检验、NaN检验
二元通用函数
- add subtract multiply divide\floor_divide 加减乘除
- maximum,fmax minmum,fmin 最大值最小值 忽略NaN
- mod 求余数
- copysign 将第一个数组的符号 改为第二个数组的符号值
数学、统计
- sum 轴向和
- mean
- std, var 标准差
- cumsum 累计和
- cumprod
- argmin 最小值索引
- argmax 最大值索引
布尔型数组
- .all()
- .any()
排序
- sort(轴) 沿轴的排序
唯一值、成员资格
- unique(x)
- intersect1d(x,y) 交集
- union1d(x, y) 并集
- in1d(x, y) x中各个元素在y数组中的成员资格
- setdiff1d(x, y) 差集 x-y
- setor1d(x,y) 异或 x,y独有 (属于并集 不属于交集)
线性代数
- diag
- dot 矩阵点乘
- trace 对角和
- eig 特征值 特征向量
- inv 方阵的逆
- svd qr slove lstsq
随机函数
- seed
shuffle(x)
- 对序列x进行随机重排 不返回值 直接修改x
permutation(x)
- 一个序列的随机排列 或者一个乱序的整数范围序列 返回x序列的重排
- rand(size) 0-1的均匀分布的随机抽样 给定size
- randint(low, high=None, size=None, dtype=’l’)
- randn() 给定size的均值0,方差1的正态分布抽样
- binomial(n, p, size=None) 二项分布
- normal(loc=0.0, scale=1.0, size=None) 正态分布
- beta() beta分布
chisquare() 卡方分布
- 若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)
- gamma() 伽马分布
- uniform 均布[0,1)
