2020-11-29

线性代数

矩阵乘积

矩阵的內积操作,如果是一维数组的话就是內积,多维数组的话就是乘积操作

x=np.random.randint(1,11,[5,2])
y=np.random.randint(7,17,[2,5])
z=np.dot(x,y)
print(z)
#[[111 144 151 104 125]
 #[ 51  72  77  46  61]
# [131 156 160 127 139]
 #[103 132 138  97 115]
 #[ 27  36  38  25  31]]
 #一维数组
a=np.random.randint(1,10)
b=np.random.randint(2,11)
c=np.dot(a,b)
print(c)#21

矩阵的特征值和特征向量

满足A*v=xv矩阵,其中v是特征向量,x为特征值,A 为方阵

  1. linalg.eig(A):计算两个,返回的第一个值是特征值,第二个值是特征向量
  2. linalg.eigvals(A):计算特征值
  • 计算特征值和特征向量
x=np.array([[1,0,0],[0,2,0],[0,0,3]],dtype='int32')
z=np.linalg.eigvals(x)
print(z)#1,2,3
# 两个值同时计算
v,z=np.linalg.eig(x)
print(v)
print(z)
#输出
[1. 2. 3.]
[1. 2. 3.]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
  • 验证特征值和特征向量

使用allclose函数检验函数是否相等,这个函数判定两个数值的元素是否都为True

x=np.array([[1,0,0],[0,2,0],[0,0,3]])
print(x)
z=np.linalg.eigvals(x)
print(z)#1,2,3
v,y=np.linalg.eig(x)
print(v)
print(y)
for i in [0,1,2]:
    if np.allclose(v[i]*y[:,i],np.dot(x,y[:,i])):
        print('good')
    else:
        print("***")

行列式

  • 求解行列式
x=np.array([[1,2],[3,4]])
np.linalg.det(x)

矩阵的秩

np.linalg.matrix_rank(a)

方阵的迹

就是主对角线的和

np.trace(a)
#还可以计算副对角线的
np.trace(a,offset=1,-1....)

解方程,求逆矩阵

求解方程组

逆矩阵满足AB=BA=E,其中矩阵的秩必须要满秩,即方阵的DET不为0

  • 求逆矩阵
x=np.array([[1,1,0],[0,2,0],[0,0,3]])
a=np.linalg.det(x)
a_inverse=np.linalg.inv(x)
print(a_inverse)
#验证,eye:单位矩阵
x=np.allclose(np.dot(A,a_inverse),np.eye(3))
#求解伴随矩阵A* =a_inverse*|A|
A*=a_inverse*|A|
  • 求解方程组

使用solve求解,其实就是获取一个系数矩阵,和一个值矩阵,只能求解存在解的情况,否则报错

#x+2y+z=7
#2x-y+3z=7
#3x+y+2z=18
A=np.array([[1,2,1],[2,-1,3],[3,1,2]])
b=np.array([7,7,18])
x=np.linalg.solve(A,b)
print(x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值