Python矩阵运算、下降梯度和最小二乘法

这篇博客详细介绍了Python中矩阵的基本操作,包括创建、转置、乘法及加减运算。还探讨了矩阵乘法的性质,如结合性和分配性,并展示了如何计算方阵的迹和行列式。此外,文章深入讨论了解多元一次方程的逆矩阵方法。最后,讲解了梯度下降法和最小二乘法在求解问题中的应用,对比了两者在线性回归中的不同结果。
摘要由CSDN通过智能技术生成

实验目的:
1.练习Python矩阵
2.解释微分、梯度的含义? 什么是梯度下降法?并用用梯度下降法手工求解
参考,在Excel里用牛顿法、或者梯度下降法求解 z=2(x-1)2+y2 的近似根。
3.线性回归可以用最小二乘法求解,也可以用梯度下降法求解,试比较二者的结果。参考1参考2
实验环境:python3.x,Anaconda
参考资料:python矩阵基本运算.doc
前置实验:环境搭建好

一、python矩阵

1.python矩阵操作

(1)导入包

import numpy as np            #导入包

(2)使用mat函数创建矩阵

a=np.mat([[1,2,3],[4,5,6]])   #创建2*3的矩阵
a

在这里插入图片描述
(3)使用shape

a.shape          #获取矩阵的大小

在这里插入图片描述
(4)使用下标

a.T              #使用下标读矩阵中元素

在这里插入图片描述
(5)行列转换

a.transpose()    #进行行列转换
a.T

在这里插入图片描述
(6)二位数组
实际上官方文档建议我们使用二维数组代替矩阵来进行矩阵运算;因为二维数组用得较多,而且基本可取代矩阵。

b=np.array([[1,2,3],[4,5,6]])#用二维数据代替矩阵
b
b.T

在这里插入图片描述
在这里插入图片描述
(7)加减法

a+a   #加法
b-b   #减法

在这里插入图片描述
在这里插入图片描述
(8)列表不能进行加减法

c=[[1,2,3],[4,5,6]]#列表不能进行加减
c+c

在这里插入图片描述

2.python矩阵乘法

(1)使用二维数组创建两个矩阵A、B

#使用二维数组创建两个矩阵A和B
A=np.array([[1,2,3],[4,5,6]])
B=A.T

在这里插入图片描述
(2)矩阵数乘

#矩阵每个元素乘以该数
2*A
2*B

在这里插入图片描述
在这里插入图片描述
(3)dot函数用于矩阵乘法,对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是内积。交换矩阵的前后位置会导致不同的结果,看下面的例子

A*B
np.dot(A,B)
np.dot(B,A)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)再创建一个二维数组,验证矩阵乘法的结合性

#创建一个二维数组
C=np.array([[1,2],[1,3]])
C
#验证矩阵乘法的结合性 (AB)C=A(BC)
np.dot(np.dot(A,B),C)
np.dot(A,np.dot(B,C))

在这里插入图片描述
在这里插入图片描述

(5)对加法的分配性 (A+B)C=AC+BC,C(A+B)=CA+CB

#验证加法的分配性 (A+B)C=AC+BC  C(A+B)=CA+CB
D=B-1
D
np.dot(A,B+D)
np.dot(A,B)+np.dot(A,D)

在这里插入图片描述
在这里插入图片描述

(6)数乘的结合性2x(AB)=(2A)xB=Ax(2B)

#验证数乘的结合性
2*(np.dot(A,B))
np.dot(A,2*B)
np.dot(2*A,B)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(7)接着我们用到一个新知识,使用eye创建一个单位矩阵,单位矩阵的定义就是看下面的步骤

#使用 eye 创建一个单位矩阵
I=np.eye(3)
I

在这里插入图片描述

(8)一个矩阵A乘以一个单位矩阵,还是它本身

#矩阵 A 乘以一个单位矩阵
np.dot(A,I)

在这里插入图片描述

3.python矩阵转置

(1)创建矩阵A,再用T方法转置

A=np.array([[1,2,3],[4,5,6]])#使用二维数组创建一个矩阵A
A.T#矩阵A的转置矩阵

在这里插入图片描述

(2)(A’)’=A

A.T.T#(A')'=A

在这里插入图片描述
(3)创建两个尺寸相同的矩阵,验证(A±B)’=A’±B’

B=np.array([[1,4],
            [2,5],
            [3,6],
           ])
D=np.array([[0,3],
            [1,4],
            [2,5]
           ])
(B+D).T
B.T+D.T

在这里插入图片描述
在这里插入图片描述
(4)(KA)’=KA’

#(KA)'=KA'
(10*A).T
10*A.T

在这里插入图片描述
在这里插入图片描述

(5)(A×B)’= B’×A’

#(A×B)'= B'×A'
np.dot(A,B).T
np.dot(A.T,B.T)
np.dot(B.T,A.T)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.python求方程的迹

(1)先创建一个方阵(方阵也就是行数等于列数的矩阵)

#创建一个方阵
E=np.array([[1,2,3],
            [4,5,6],
            [7,8,9]])

(2)用trace计算方阵的迹

np.trace(E)

在这里插入图片描述
(3)再创建一个方阵F

F=E-2

(4)验证方阵的迹等于方阵的转置的迹

np.trace(E)
np.trace(E.T)

在这里插入图片描述
(5)验证一下方阵的乘积的迹

np.trace(np.dot(E,F))
np.trace(np.dot(F,E))

在这里插入图片描述
在这里插入图片描述
(6)验证一下方阵的和的迹等于方阵的迹的和

np.trace(E)+np.trace(F)
np.trace(E+F)

在这里插入图片描述
在这里插入图片描述

5.python方阵的行列式计算方法

(1)先创建两个方阵(就使用上面的E、F)
(2)使用det方法求得方阵E和方阵F的行列式

np.linalg.det(E)
np.linalg.det(F)

在这里插入图片描述
在这里插入图片描述

6.python求逆矩阵/伴随矩阵

在这里插入图片描述
(1)创建一个方阵

A=np.array([[1,-2,1],
            [0,2,-1],
            [1,1,-2]])

在这里插入图片描述
(2)使用linalg.det求得方阵的行列式

A_abs=np.linalg.det(A)
A_abs

在这里插入图片描述
(3)使用linalg.inv求得方阵A的逆矩阵

B=np.linalg.inv(A)
B

在这里插入图片描述
(4)利用公式求解
在这里插入图片描述

A_bansui=B*A_abs
A_bansui

在这里插入图片描述

7.python解多元一次方程

(1)首先将这个方程格式调整好,按照x-y-z-常数项的顺序排列
在这里插入图片描述

(2)将未知数的系数写下来,排列成一个矩阵a

a=[[1,2,1,],[2,-1,3],[3,1,2]]
a=np.array(a)

在这里插入图片描述
(3)常数项构成一个一维数组(向量)

b=[7,7,18]
b=np.array(b)

在这里插入图片描述
(4)使用linalg.solve方法解方程,参数a指的是系数矩阵,参数b指的是常数项矩阵

x=np.linalg.solve(a,b)
x

在这里插入图片描述
(5)使用点乘的方法可以验证一下,系数乘以未知数可以得到常数项

np.dot(a,x)

在这里插入图片描述

二、梯度下降法

三、最小二乘法

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值