终于不用看枯燥的数学公式了,虽然比较喜欢数学,但是没有实际的应用也就失去了意义,这里开始学习机器学习中用到的一些库,主要包括了numpy,scipy,matplotlib等。先学习下numpy吧,至于python基础可以看Python的简单语法就差不多了。
1 Numpy简介
Numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
2 基本功能
快速高效的多维数组对象ndarray 用于对数组执行元素级计算以及直接对数组执行数学运算的函数 用于读写硬盘上基于数组的数据集的工具 线性代数运算、傅里叶变换,以及随机数生成 用于将C、C++、Fortran代码集成到Python的工具 除了为Python提供快速的数组处理能力,NumPy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器。
3 NumPy数组ndarray
3.1 ndarray属性
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。 比较重要ndarray对象属性有:
属性 | 介绍 |
ndarray.ndim | 数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵) |
ndarray.shape | 数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性 |
ndarray.size | 数组元素的总个数,等于shape属性中元组元素的乘积 |
ndarray.dtype | 表示数组中元素类型的对象,可使用标准的python类型创建或指定dtype |
ndarray.itemsize | 数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),又如,一个元素类型为complex32的数组item属性为4(32/8) |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性 |
3.2 ndarray创建
3.2.1 array函数
运行结果:
3.2.2 zeros函数
创建全0的数组
运行结果:
3.2.3 ones函数
创建一个全为1的数组
运行结果:
3.2.4 empty函数
创建一个内容随机并且依赖与内存状态的数组
运行结果:
3.2.5 arange函数
返回一个数列形式的数组
从0开始,差值为5的等差数列:
运行结果:
从0开始,差值为0.5的等差数列:
运行结果:
3.2.6 linespace函数
从0到3,个数为5个的数列:
运行结果如下:
3.3 基本运算
3.3.1 基本
算数运算,每个元素的加减乘除
运行结果:
3.3.2 乘法
普通*乘法就是各个元素相乘,矩阵乘法用dot函数,可实现矩阵的乘法运算
运行结果:
3.3.3 最大值,最小值,求和
求数列的所有元素中的最大值,最小值,以及求和
运行结果:
求每一行中的元素的最小值,求和
运行结果如下:
3.3.4 索引,切片和迭代
- 索引: 取出数组的元素,也即是下标。
- 切片: 取list中的部分元素采用切片操作。
- 迭代: 如果给定一个list,我们可以通过for循环来遍历这个list,这种遍历我们称迭代(Iteration)。
针对一维数组:
运行结果如下:
针对多维数组:
运行结果:
3.4 shape操作
数组的形状取决于其每个轴上的元素个数
运行结果:
改变数组形状
运行结果:
这里把3行4列的数组转换为2行6列的数组
resize函数
运行结果如上述例子一致。
4 NumPy的linalg函数
先看下跟线性代数有关的一些函数,如下表所示:
类型 | 说明 |
diag | 以一维数组的形式返回方阵的对角线(或非对角线元素),或将一维数组转换为方阵(非对角线元素为0) |
dot | 矩阵乘法 |
trace | 计算对角线元素的和 |
det | 矩阵行列式 |
eig | 计算方阵的特征值和特征向量 |
inv | 计算方阵的逆 |
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算QR分解 |
svd | 计算奇异值分解 |
solve | 解线性方程Ax = b,其中A为一个方阵 |
lstsq | 计算Ax = b的最小二乘解 |
运行结果:
5 NumPy的random函数
随机数生成
类型 | 说明 |
seed | 确定随机数生成?的种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的返回 |
shuffle | 对一个序列就地随机乱序 |
rand | 产生均匀分布的样本值 |
randint | 从给定的上下限范围内随机选取整数 |
randn | 产生正态分布(平均值为0,标准差为1) |
binomial | 产生二项分布的样本值 |
normal | 产生正态(高斯)分布的样本值 |
beta | 产生Beta分布的样本值 |
chisquare | 产生卡方分布的样本值 |
gamma | 产Gamma分布的样本值 |
uniform | 产生在[0, 1]中均匀分布的样本值 |
运行结果:
这里应该是结合图形化的,还没学就直接打印出数据,后续结合matplotlib,可以非常直观。