课程介绍
课程名称:Python3入门机器学习 经典算法与应用 入行人工智能
课程章节: 3-6; 3-7; 3-8
主讲老师:liuyubobobo
今日内容
- Numpy中的矩阵运算
- Numpy数组(和矩阵)的合并与分割
第一部分-Numpy中的矩阵运算
1.证明矩阵的计算效率
n=10000
L1 = [i for i in range(n)]
L2 = np.array(n)
#在python中得使用for循环来进行乘法运算
A = []
for e in L1:
A.append(2*e)
#在python中得使用表达式来进行乘法运算
A = [2*e for e in L1]
#使用矩阵进行乘法运算
A = 2*L
#通过%time模式方法测量 for最慢,表达式还行,矩阵运算最快
2.矩阵与实数的加减乘除
X = np.arange(1,17).reshape((4,4))
X + 1
#加法
X - 1
#减法
X * 2
#乘法
X / 2
#除法
X // 2
#整÷
X ** 2
#平方
X % 2
#取余
1 / X
#倒数
np.abs(X)
#正数
np.sin(X)
#正弦
np.cos(X)
#余弦
np.tan(X)
#正切
np.exp(X)
#取e的x次
np.power(3, X)
#求3的X次方
#3**X
np.log(X)
#以e为底
np.log2(X)
#以e为底
np.log10(X)
#以e为底
3.矩阵与矩阵的运算
A = np.arange(4).reshape((2,2))
B = np.full((2,2),10)
A=array([[0, 1],
[2, 3]])
B=array([[10, 10],
[10, 10]])
A+B
# 对应元素相加
A - B
# 对应元素相加
A * B
#对应元素相乘
#其实和矩阵相乘其实不一样
#使用矩阵乘法用A.dot(B)
A / B
#对应元素相除
A.T
#矩阵的转置
4.向量和矩阵的运算
v = np.array([1,2])
#array([1, 2])
A = np.arange(4).reshape((2,2))
#array([[0, 1],
# [2, 3]])
v + A
#相当于数学上不合理,在这里相当于
#array([[1, 3],
[3, 5]])
#实际上要对v进行堆叠才能符合数学意义上的加法
np.vstack([v] * A.shape[0]) + A
#对v进行堆叠,堆叠A这个元素第一维度的数量,也就是a有几行,v就堆叠几行
v.dot(A)
#矩阵相乘
5.矩阵的逆运算
A = np.arange(4).reshape((2,2))
#array([[0, 1],
# [2, 3]])
invA = np.linalg.inv(A)
#计算逆矩阵
invA.dot(A)
#逆矩阵满足,乘以原矩阵,为单位矩阵
X = np.arange(16).reshape((2,8))
#计算伪逆矩阵
pinvX = np.linalg.pinv(X)
6.聚合操作
L1 = np.random.random(100)
#创建100个由0-1之间的随机数组成的数组
sum(L1)
#python聚合操作
np.sum(L1)
#numpy聚合操作
big_array = np.random.rand(100000)
%timeit sum(big_array)
%timeit np.sum(big_array)
#15 ms ± 1.09 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
#61.8 µs ± 7.35 µs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)
#矩阵算得很快噢
np.min(big_array)
#numpy找最小
np.max(big_array)
#numpy找最大
np.sum(X,axis=0)
#按行进行累加
np.sum(X,axis=1)
#按列进行累加
np.prod(X)
#元素的乘积,吧矩阵的元素挨个乘一变
np.mean(X)
#平均值
np.median(X)
#中位数
#中位数能更好的排除异常点的干扰
np.percentile(big_array,q=50)
#这个数组中百分之50都是小于这个数的
#【0, 25, 50, 75, 100】常用点数
#查看常用比
np.var(big_array)
#方差
np.std(big_array)
#标准差
np.mean(x)
#均值
第二部分-Numpy数组(和矩阵)的合并与分割
1.合并操作
x = np.array([1,2,3])
y = np.array([3,2,1])
np.concatenate([x,y])
#合并操作(1,6)
A = np.array([[1,2,3],[4,5,6]])
np.concatenate([A,A], axis=1)
#矩阵和矩阵的合并操作
#axis轴,默认为第一个维度也就是沿着行方向合并;1为2维,也就是沿着列方向合并
#array([[1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6]])
np.vstack([A,z])
#垂直方向,智能识别数组与矩阵,进行拼接,比np.concatenate智能
np.hstack([a,D])
#水平方向,智能识别数组与矩阵,进行拼接,比np.concatenate智能
2.分割操作
x = np.arange(10)
A = np.arange(16).reshape(4,4)
A1, A2 = np.split(A, [2],axis=1)
#np.split(需要分割的数据, [从第几个开始分割,【】可以省略],
#从那个维度开始分割默认为axis=0从第一个维度,axis=1从第二个维度开始分割)
#假如觉得输入axis不够明显
#从垂直方向分割,也就是横着切一刀
upper, lower = np.vsplit(A,[2])
#从水平方向进行分割,竖着来一刀
left, right = np.hsplit(A,[2])
今日思考
很多的函数似乎可以通过其他函数进行组合来实现,假如没有效率上或者阅读方面的影响,我觉得可以灵活使用不同形式来实现代码,比如输入参数可以直接输入,也可以指定参数如:np.split(A, [2],1)----np.split(A, [2],axis=1)
课程截图
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦