一、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 ]]
可以发现输出的特征值是有序的,并且特征向量也是经过排序的。