Numpy学习09-线性代数

这篇博客介绍了如何使用Numpy进行线性代数的相关操作,包括矩阵乘法、特征值和特征向量计算、奇异值分解、QR分解、Cholesky分解、范数计算、行列式、矩阵秩和迹的求解,以及如何解线性方程组和计算逆矩阵。此外,还给出了相关的代码示例和作业题目。
摘要由CSDN通过智能技术生成


一、线性代数

Numpy中有matrix类型的矩阵对象,根据“显式优于隐式”,使用ndarray。

提示:以下为函数用法,数学推导无。

二、相关函数

1.矩阵成绩

numpy.dot(a, b[, out]) 是计算两个矩阵的乘积,如果是一维数组则是它们的内积。
提示:在线性代数里面讲的维数和数组的维数不同,如线代中提到的n维行向量在 Numpy 中是一维数组,而线性代数中的n维列向量在 Numpy 中是一个shape为(n, 1)的二维数组。

代码示例:

import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
z = np.dot(x, y)
print(z)  # 70

x = np.array([[1, 2, 3], [3, 4, 5], [6, 7, 8]])
print(x)
# [[1 2 3]
#  [3 4 5]
#  [6 7 8]]

y = np.array([[5, 4, 2], [1, 7, 9], [0, 4, 5]])
print(y)
# [[5 4 2]
#  [1 7 9]
#  [0 4 5]]

z = np.dot(x, y)
print(z)
# [[  7  30  35]
#  [ 19  60  67]
#  [ 37 105 115]]

2.特征值和特征向量

  • numpy.linalg.eig(a): 计算方阵的特征值和特征向量。
  • numpy.linalg.eigvals(a): 计算方阵的特征值
    示例1:求特征值和特征向量:
import numpy as np

# 创建一个对角矩阵!
x = np.diag((1, 2, 3))  
print(x)
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]

print(np.linalg.eigvals(x))
# [1. 2. 3.]

a, b = np.linalg.eig(x)  
# 特征值保存在a中,特征向量保存在b中
print(a)
# [1. 2. 3.]
print(b)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

# 检验特征值与特征向量是否正确
for i in range(3): 
    if np.allclose(a[i] * b[:, i], np.dot(x, b[:, i])):
        print('Right')
    else:
        print('Error')
# Right
# Right
# Right

示例2:判断对称阵是否为正定阵(特征值是否全部为正):

A = np.arange(16).reshape(4, 4)
print(A)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]

A = A + A.T  # 将方阵转换成对称阵
print(A)
# [[ 0  5 10 15]
#  [ 5 10 15 20]
#  [10 15 20 25]
#  [15 20 25 30]]

B = np.linalg.eigvals(A)  # 求A的特征值
print(B)
# [ 6.74165739e+01 -7.41657387e+00  1.82694656e-15 -1.72637110e-15]

# 判断是不是所有的特征值都大于0,用到了all函数,显然对称阵A不是正定的
if np.all(B > 0):
    print('Yes')
else:
    print('No')
# No

3.矩阵分解

(一)奇异值分解

函数:u, s, v = numpy.linalg.svd(a, full_matrices=True, compute_uv=True, hermitian=False)

  • a 是一个形如(M,N)矩阵
  • full_matrices的取值是为False或者True,默认值为True,这时u的大小为(M,M),v的大小为(N,N)。否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。
  • compute_uv的取值是为False或者True,默认值为True,表示计算u,s,v。为False的时候只计算s。
  • 总共有三个返回值u,s,v,u大小为(M,M),s大小为(M,N),v大小为(N,N),a = usv。
  • 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值