本文简要介绍如何使用 NumPy 进行矩阵生成、求解特征值与特征向量。
矩阵生成
数组类
NumPy 提供数组类 ndarray ,其定义为
1 | class numpy.ndarray |
ndarray 对象包括以下重要属性
ndarray.ndim- 数组的维数,例如矩阵的 ndim 为 2 ;ndarray.shape- 数组的维度/形状,以整数型元组给出。 行 列矩阵的 shape 为(n,m);ndarray.size- 数组的元素个数;ndarray.dtype- 数组中元素的数据类型;
数组创建
-
numpy.array(array_like_obj, dtype = None)将列表、元组或其他序列对象,转化并创建为ndarray对象; -
numpy.zeros(shape, dtype = None)接收数组维度 (shape tuple),并创建全 0 数组,例如 零矩阵np.zeros((2,2)); -
numpy.eye(N, M = None, k = 0)创建 行 列 ( 默认等于 ) 单位对角矩阵,对角元上移 个元素; -
numpy.full(shape, fill_value, dtype = None)接收数组维度创建数组,并将 fill_value 赋给数组的每个元素; -
numpy.zeros_like(array_like_obj)创建一个形状和数据类型与 array_like_obj 均相同的全零数组 -
numpy.arange(start, stop, step, dtype)生成区间 [start, stop) ,步长为 step 的数组 -
numpy.linspace(start, stop, num = 50, endpoint = True)生成 [start, stop],样本数量为 num,按照 endpoint 为 True/False 包含/不包含 stop point 的数组,参见以下示例
特征值与特征向量
对于方阵 ,若存在标量 和非零向量 使得
则称 为矩阵 的特征值, 为对应的特征向量。
标准特征值问题
一般方阵(可能是非对称、复矩阵)的特征分解使用 numpy.linalg.eig()
1 | A = np.array([[2, 1], |
eigvals 为特征值数组,形状为 (n,),eigvecs 为特征向量矩阵,每一列为一个归一化的特征向量,形状为 (n, n)。
以上代码输出
1 | Eigenvalues: [3. 1.] |
其中第一个特征值为 ,对应的特征向量为 ;第二个特征值为 ,对应的特征向量为 。
对称矩阵的特征值问题
对于实对称矩阵或厄米矩阵,更推荐使用 numpy.linalg.eigh()
1 | A = np.array([[4, 1], |
返回的特征值有序,默认从小到大。