慕课网机器学习入门笔记3

Numpy中的矩阵运算
python的[]数组如果* 2的话,得到两个该数组相连:
慕课网机器学习入门笔记3
若是想实现数组中每个元素都乘以2,那么:
慕课网机器学习入门笔记3
可以看到,运行效率是比较低的,而用下面这种方式,则快的多:
慕课网机器学习入门笔记3
而应用numpy方式,则可以更快:
numpy.array的数据2的结果是array里每个元素都2(这种方式的运行效率更加快了)
慕课网机器学习入门笔记3慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
而且这种 * 2的操作在其他运算符也都可以实现类似的效果,比如 npList + 1就是这个nplist里的所有元素都+1,这种运算方法在numpy里统一叫做Universal Function+ - * / // **幂运算 %求余 np.abs,np.sin…np.exp取e的x次方,np.power,如np.power(3,x)就是求3的x次方,np.log2(x),np.log10(x),以谁为底可以随便调:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
矩阵之间的运算:
两个同样维度同样大小的矩阵可以直接+ - * /等操作,而且是对应元素间的操作,比如这里的 * 就不是实际的矩阵相乘的结果,而是矩阵A的[x,y]和矩阵B的[x,y]值一 一对应相乘的结果:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
而如果我们要得到现实定义中矩阵相乘的结果,要用矩阵A.dot(矩阵B),就是A矩阵的每一行与B矩阵的每一列做相乘再相加的结果:
慕课网机器学习入门笔记3
矩阵的转置,也就是矩阵的行变列,列变行,只需要调用矩阵的属性T即可:
A.T的结果就是矩阵A的转置:
慕课网机器学习入门笔记3
向量和矩阵的运算
v = np.array([1,2])
a = np.range(4).reshape(2,2); //[[0,1],[2,3]]
v + a 的结果就是 //[[1,3],[3,5]] 也就是每行的对应列相加:
慕课网机器学习入门笔记3
//shape[0]是这个矩阵形状的第一个参数,比如reshape(3,4)是3行4列,此时 shape[0]为3,shape[1]为4
实际上也就相当于np.vstack([v] * A.shape[0]) + a
也可以写成np.tile(v,(2,1)) + a这个tile函数后面跟着的是该数组要堆叠的次数,堆叠2行 堆叠一列然后再和a相加:
慕课网机器学习入门笔记3
向量与矩阵的乘法:
慕课网机器学习入门笔记3
numpy比较智能,也可以A.dot(v),这是一个22的矩阵和一个12的矩阵的运算,之所以能进行运算是因为numpy将一个12的矩阵转化为了一个21的矩阵:
慕课网机器学习入门笔记3
矩阵的逆:
np.linalg.inv(A) 就可以得到A的逆矩阵,这里的linalg就是linear algebra线性代数,inv就是inverse,逆矩阵与原矩阵相乘得到单位矩阵:
慕课网机器学习入门笔记3
并不是所有矩阵都可以由逆矩阵,要是一个可以互相乘的方阵才有可能存在逆矩阵;
非方阵我们可以求出其伪逆矩阵,
pinvX = np.linalg.pinv(X);
原矩阵乘以伪逆矩阵的结果也会是一个对角线为1的方阵:
慕课网机器学习入门笔记3
Numpy中的聚合运算
虽然python自带的也有sum等函数,但是执行效率上sum(list)和np.sum(npList)要差一个量级:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
还有其他聚合运算:
这些代码也可以写成下几行所示的形式:
慕课网机器学习入门笔记3
二维数组的聚合运算:
axis = 0是沿着每一行进行计算(实际上就是一列上各数据相加的结果)
axis = 1是沿着每一列进行计算(实际上就是一行上各数据相加的结果)
慕课网机器学习入门笔记3
其他聚合运算:
np.prod(x) x的所有元素的乘积 (product)
np.prod(x + 1) 对x所有元素+1的结果相乘的乘积
np.mean(x) x的平均值
np.median(x) x的中位数慕课网机器学习入门笔记3
np.percentile(x,q=50)就相当于 x中50%小于的值(该值相当于中位数)
np.percentile(x,q=100)相当于np.max(x) 100%:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
np.var()求方差,np.std()求标准差,np.mean求均值
慕课网机器学习入门笔记3
Numpy中的arg运算
np.argmin(x) 和 np.argmax(x)会返回min和max的下标:
慕课网机器学习入门笔记3
排序和使用索引:
np.random.shuffle(x)可以对x进行洗牌操作,打乱x内元素的顺序;
np.sort(x)对x进行排序操作, 这个函数会返回一个排好序的数组,而没有改变原始x数组的顺序; 而x.sort()会对原始x进行修改:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
对于二维数组,np.sort(x)默认axis = 1,(即沿着列排序,即把每一行都排好序):
慕课网机器学习入门笔记3
若是想沿着行排序,即把每一列都排好序,则把axis赋值为0:
慕课网机器学习入门笔记3
np.argsort(x)是对x的索引进行排序:
慕课网机器学习入门笔记3
np.partition(x,3)根据传入的标定点3,把原数排成两部分(还是一个数组),小于3的在前面,大于3的在后面,也有argpartition方法(索引):
慕课网机器学习入门笔记3
这些方法也可以应用到二维数组中:
慕课网机器学习入门笔记3
Numpy中的比较和Fancy Indexing
x[ind]代表索引,即把ind里的元素当成索引,把他们打印出来:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
索引数组不仅可以是一维数组,还可以是二维数组:
x是一个一维数组,x【ind】是按照索引值提取出来元素,按照索引数组的格式将他们排成了一个二维数组:
慕课网机器学习入门笔记3
在二维数组中提取某个元素:
慕课网机器学习入门笔记3
还可以将行固定,或者取某几行:
慕课网机器学习入门笔记3
也可以传入布尔类型的变量:True代表提取着一行(列)的元素,False代表不提取:
慕课网机器学习入门笔记3
布尔类型的应用:
想找出X小于等于3的元素个数:
慕课网机器学习入门笔记3
np.sum(x %2 = = 0) 此时得到的是数组中偶数的个数,此时sum统计的是True作为1,False作为0;
np.count_nonzero(x <= 3)
np.any(x == 0) 这个any方法是数组中有任何元素值为True,则返回True;
np.all(x > 0) 这个all方法是数组中的所有元素都为True,则返回True;
以上方法对一维和二维都有效:
axis = 0,看某一列有多少偶数,axis = 1,看某一行有多少偶数
慕课网机器学习入门笔记3
如果我们需要判断多个条件的话,则需要用位运算符连接
np.sum((x > 3) & (x < 10))
np.sum((x > 6) | (x < -6))
np.sum(~(x == 0)) 这个也就相当于np.sum(x != 0):
慕课网机器学习入门笔记3
采用如下的方法可以在数组中抽出想要的数据:
最后一行代码的写法是抽出满足所有行中最后一列元素能被3整除的行:
慕课网机器学习入门笔记3
Matplotlib数据可视化基础
加载类库:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
绘制两条曲线:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3
若是想让cos曲线变成红色,只需要:
慕课网机器学习入门笔记3
想调整曲线的样式:(更多样式操作在matplotlib文档里查看)
慕课网机器学习入门笔记3
想调整坐标轴取值范围:
慕课网机器学习入门笔记3
同时调整两坐标轴范围:
慕课网机器学习入门笔记3
给坐标轴取名字:
慕课网机器学习入门笔记3
给曲线添加图示(需要加上plt.legend()):
慕课网机器学习入门笔记3
给绘制的图添加标题:
慕课网机器学习入门笔记3
绘制散点图:
慕课网机器学习入门笔记3
二维的正态分布
x = np.random.normal(0,1,1000)
y = np.random.normal(0,1,1000)
plt.scatter(x,y,alpha=0.5)
plt.show()
其中,alpha代表不透明度,0代表完全透明,1代表完全不透明
慕课网机器学习入门笔记3
数据加载和简单的数据探索
具体讲解在课程里:
慕课网机器学习入门笔记3
慕课网机器学习入门笔记3