吴恩达机器学习学习笔记第六章:机器学习中的线性代数操作python3版(含numpy、panda库的使用)

pracitice1:是针对矩阵元素的基本运算

#practice1是针对矩阵元素的基本运算
import numpy as np
A=np.array([[1,2,3],[3,4,5]])#列表转换成矩阵
Awithalphabet=np.array([[1,"b",3],[3,4,5]])#看看矩阵里是否只能塞数字 答案是也可以装其他东西
Aarray=[1,2,3],[3,4,5]#对比矩阵与普通列表的区别
zero=np.zeros((3,5))#生成一个3行5列的0矩阵
E=np.eye(2)#生成一个2阶单位阵
Ainarow=np.arange(6)#生成从0到5的行向量
Ainarow23=np.arange(6).reshape(2,3)#生成一个两行三列(reshape的功能)数字从0到5的矩阵  reshape是不是双层括号都可以见下
Arandom=np.random.rand(5,5)#生成一个5*5的元素是0~1里的随机数组成的矩阵
Aempty=np.empty((3,4))#生成一个3行4列的空矩阵(但实际上里面的元素全是很接近0的)
Amyup=np.linspace(0,2.7,10).reshape((2,5))#把0~2.7砍成10份像个等差数列一样 再按递增顺序弄2*5的矩阵
Asum=np.sum(A)#求A中所有元素之和
Asin=np.sin(A)  # 对A内部所有元素取个sin
Aaverage=np.mean(A)#求A中所有元素的平均值
Amidnum=np.median(A)#求A中所有元素的中位数
Amax=np.max(A)#求A中最大的那个元素
Arowmax=np.max(A,axis=1)#求A每一行中最大值
Acolumnmax=np.max(A,axis=0)#求A中每一列中最大值
Amaxindex=np.argmin(A)#求A中最小值的索引
Ax1jiax2=np.cumsum(A)#前一个数加到第二个第二个加到第三个(有点像斐波那契)
Aclip=np.clip(A,2,4)#让小于2的数变成2 大于4的数变成4
def printtest():
  print(Aarray)
  print('\n')
  print(A)
  print("总元素个数:",A.size)
  print("行数/列数:",A.shape)
  print("维数:",A.ndim)
  print('\n')
  print(Awithalphabet)
  print('\n')
  print(zero)
  print('\n')
  print(E)
  print('\n')
  print(Ainarow)
  print('\n')
  print(Ainarow23)
  print('\n')
  print(Arandom)
  print('\n')
  print(Aempty)
  print('\n')
  print(Amyup)
  print('\n')
  print(Asum)
  print(Aaverage)
  print(Amidnum)
  print(Amax)
  print(Arowmax)
  print(Acolumnmax)
  print(Amaxindex)
  print(Ax1jiax2)
  print(Aclip)
  print(Asin)

practice2:是针对矩阵由关线性代数内容的一些运算

#practice2是针对矩阵有关线性代数内容的一些运算
import numpy as np
AA=np.array([[1,2,3],[4,5,6],[7,8,9]])
BB=np.eye((3))
CC=np.array([[1,2,0],[2,3,1]])
DD=np.array([[1,2],[5,6]])

AAjianBB=AA-BB#线性代数的矩阵加减法
print(AAjianBB)
print('\n')
yuansupingfang=AA**2#AA内部元素的平方
print(yuansupingfang)
print('\n')
print(AA*BB)#元素逐个相乘
print('\n')
chengfa=np.dot(CC,AA)#线性代数的矩阵乘法
print(chengfa)
print('\n')
zhuanzhi=np.transpose(AA)#线性代数的矩阵转置
print(zhuanzhi)
AABBshangxia=np.vstack((AA,BB))#把矩阵A和矩阵B上下合并 即线性代数中把三阶单位阵B拼到A下面
print(AABBshangxia)
AABBzuoyou=np.hstack((AA,BB))#把矩阵A和矩阵B左右合并 即线性代数中把B拼到A右边 如果把AA,BB改成AA,CC会报错 因为A是3*3 而C是2*3 左右拼不起!
print(AABBzuoyou)
print('\n')
DDdet=np.linalg.det(DD)#求矩阵D的行列式
DDni=np.linalg.inv(DD)#求矩阵D的逆
DDbansui=DDni*DDdet#利用数学公式|A|A^-1=A*
DDtrace=np.trace(DD)#求矩阵D的迹
DDrank=np.linalg.matrix_rank(DD)#求矩阵的秩
print(DD)
print(DDdet)
print(DDni)
print(DDbansui)
print(DDtrace)
print(DDrank)

practice3:是针对矩阵索引的运算

#practice3是针对矩阵索引的运算
import numpy as np
A=np.arange(1,13).reshape((3,4))
print(A)
print(A[2][1])#输出第3行的第3个第2个元素(第一行是A[0][])
for Arow in A:
    print(Arow)#输出每一行
    print('\n')
#要遍历每一列怎么办?答:先转置在遍历
for Acolumn in A.T:#A.T表示A的转置
    print(Acolumn)
    print('\n')
for element in A.flat:#先把矩阵变成一个只有一行的向量 再通过for循环把A的每个元素全部取出来遍历
    print(element)
print('\n')

practice4:矩阵的复制 关联

#practice4是修改矩阵元素、把B的某列赋给A的某列以及矩阵的复制、关联
import numpy as np
A=np.arange(12).reshape(3,4)#生成3行4列元素从0到11的矩阵
print(A)
#axis=0表示分成多行 axis=1表示分成多列
print(np.split(A,3,axis=0))#按行分成3个行向量
print(np.split(A,4,axis=1))#按行分成4个3维列向量
C=np.copy(A)#把A赋值给C但是没有关联
B=A#把A和B等同关联起来
A[2][1]=88#把A的第3行第2列改成88
A[:,0]=222#把A的第1列改成222
A[1]=5#把A的第2行全部改成5
#[][2]=10#
print(A)
print(B)
print(C)
B[:,0]=C[:,1]#把C的第2列赋值给B的第1列
print(B)
print(C)

practice5:

#practice5是增加删除矩阵的行或列
import numpy as np
a=np.array([[1,2,3],[3,4,5],[7,8,9]])
br=np.ones(3)#形成一个行向量 这里注意在numpy中他虽然是横着写的但是实际是一个列向量
bc=np.ones(3).reshape(3,1)
c=np.eye(3)

print(a)
print(br)
print(bc)
print(c)
print("下面是变化后的")
print(np.c_[br,c])#把c加到br的第一列
print(np.c_[c,br])#把c加到br的最后面那列
print(np.c_[c,bc])#本句结果和上句是一样的
print(np.r_[a,c])#把c拼在a下面
print(np.c_[a,c])#把c拼在a右边
#这里注意np.r_是按列链接 就是把两个矩阵上下拼 要求列数相等 而np.c_是左右拼 要求行数相等

以上就是暂时可能会用到的操作

猜你喜欢

转载自blog.csdn.net/weixin_42415485/article/details/81124158
今日推荐