您的位置:

np.linalg库详解

一、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 ]]

可以发现输出的特征值是有序的,并且特征向量也是经过排序的。