继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第4天 Python3入门机器学习

黄义舜
关注TA
已关注
手记 36
粉丝 4
获赞 32

课程介绍

课程名称:Python3入门机器学习 经典算法与应用 入行人工智能
课程章节: 3-6; 3-7; 3-8
主讲老师:liuyubobobo

今日内容

  1. Numpy中的矩阵运算
  2. 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)

课程截图

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP