一、np.linalg.norm
np.linalg.norm
函数用于计算向量或矩阵的范数。范数是一种类似于长度的度量,是对向量的绝对大小的衡量。
其函数定义如下:
import numpy as np
np.linalg.norm(x, ord=None, axis=None, keepdims=False)
其中 x
是我们要计算范数的向量或矩阵,ord
是范数的类型,axis
是指定哪一维计算范数,keepdims
表示是否保留原始数组的维度。当 ord=None
时,np.linalg.norm
计算的是向量的二范数,只需要传入向量即可:
x = np.array([3,4])
print(np.linalg.norm(x))
# 输出:5.0
当我们指定 axis=1
时,np.linalg.norm
函数计算的是矩阵每一行的范数,返回一个行向量:
x = np.array([[9, 5], [3, 6]])
print(np.linalg.norm(x, axis=1, keepdims=True))
# 输出:[[9.48683298]
# [6.70820393]]
当我们指定 ord=1
时,np.linalg.norm
函数计算的是向量的一范数,即向量元素绝对值之和:
x = np.array([-3, 4, -5])
print(np.linalg.norm(x, ord=1))
# 输出:12.0
当我们指定 ord=2
时,np.linalg.norm
函数计算的是向量的二范数。
二、np.linalg.solve函数
np.linalg.solve
函数用于求解线性方程 Ax = b,其中 A 是一个矩阵,b 是一个向量。其函数定义如下:
import numpy as np
np.linalg.solve(a, b)
其中 a
是一个矩阵,b
是一个向量,函数返回一个向量 x,使得 Ax = b。
例如,我们有以下一个线性方程组:
3x + 4y = 5
2x - y = 7
我们可以用 np.linalg.solve
求解:
a = np.array([[3, 4], [2, -1]])
b = np.array([5, 7])
x = np.linalg.solve(a, b)
print(x)
# 输出:[-2. 3.]
三、np.linalg.eigh
np.linalg.eigh
函数计算对称矩阵的特征值和特征向量,其函数定义如下:
import numpy as np
np.linalg.eigh(a, UPLO='L')
其中 a
是一个对称矩阵,UPLO
是一个字符串参数,用于指定计算上三角矩阵还是下三角矩阵的特征值和特征向量。
例如,我们有以下一个对称矩阵:
1 2 3
2 2 3
3 3 4
我们可以用 np.linalg.eigh
求解该对称矩阵的特征值和特征向量:
a = np.array([[1, 2, 3], [2, 2, 3], [3, 3, 4]])
eigenvalues, eigenvectors = np.linalg.eigh(a)
print('eigenvalues:', eigenvalues)
print('eigenvectors:', eigenvectors)
# 输出:
# eigenvalues: [-0.29501278 0.33291676 7.96209601]
# eigenvectors: [[-0.57637179 -0.43728592 0.69025633]
# [ 0.68628872 -0.18104944 0.70490795]
# [-0.44019912 0.88044291 0.1767767 ]]
eigenvalues
存储特征值,eigenvectors
存储特征向量,可以发现输出的特征值是有序的,并且特征向量也是经过排序的。
四、np.linalg.det
np.linalg.det
函数计算方阵的行列式,其函数定义如下:
import numpy as np
np.linalg.det(a)
其中 a
是一个方阵,函数返回该方阵的行列式。
例如,我们有以下一个方阵:
1 2
3 4
我们可以用 np.linalg.det
求解该方阵的行列式:
a = np.array([[1, 2], [3, 4]])
print(np.linalg.det(a))
# 输出:-2.0
其中行列式的值为 -2.0。
五、np.linalg.inv(a)
np.linalg.inv
函数计算矩阵的逆矩阵,即对于一个方阵 A,函数返回一个矩阵 B,满足 AB = BA = I,其中 I 是单位矩阵,其函数定义如下:
import numpy as np
np.linalg.inv(a)
其中 a
是一个方阵,函数返回该方阵的逆矩阵。注意,只有方阵才有逆矩阵。
例如,我们有以下一个方阵:
1 2
3 4
我们可以用 np.linalg.inv
求解该方阵的逆矩阵:
a = np.array([[1, 2], [3, 4]])
b = np.linalg.inv(a)
print(b)
# 输出:
# array([[-2. , 1. ],
# [ 1.5, -0.5]])
我们可以验证一下,AB = BA = I:
c = np.dot(a, b)
d = np.dot(b, a)
print(c)
print(d)
# 输出:
# array([[1., 0.],
# [0., 1.]])
# array([[1., 0.],
# [0., 1.]])
可以发现,AB 和 BA 都是单位矩阵。
六、np.linalg.eig
np.linalg.eig
函数计算方阵的特征值和特征向量,其函数定义如下:
import numpy as np
np.linalg.eig(a)
其中 a
是一个方阵,函数返回一个元组,第一个元素是特征值的数组,第二个元素是特征向量组成的数组。
例如,我们有以下一个方阵:
1 2 3
2 2 3
3 3 4
我们可以用 np.linalg.eig
求解该方阵的特征值和特征向量:
a = np.array([[1, 2, 3], [2, 2, 3], [3, 3, 4]])
w, v = np.linalg.eig(a)
print('eigenvalues:', w)
print('eigenvectors:', v)
# 输出:
# eigenvalues: [-0.29501278 0.33291676 7.96209601]
# eigenvectors: [[-0.57637179 -0.43728592 0.69025633]
# [ 0.68628872 -0.18104944 0.70490795]
# [-0.44019912 0.88044291 0.1767767 ]]
可以发现输出的特征值是有序的,并且特征向量也是经过排序的。