赞
踩
矩阵的定义、矩阵的加法、矩阵的数乘、矩阵的转置与二维数组完全一致,但矩阵的乘法有不同的表示。numpy.dot(a, b[, out]) 计算两个矩阵的乘积,如果是一维数组则是它们的内积。
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]] z = np.dot(y, x) print(z) # [[ 29 40 51] # [ 76 93 110] # [ 42 51 60]]
注意:在线性代数里面讲的维数和数组的维数不同,如线代中提到的n维行向量在 Numpy 中是一维数组,而线性代数中的n维列向量在 Numpy 中是一个shape为(n, 1)的二维数组。
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】判断对称阵是否为正定阵(特征值是否全部为正)。
import numpy as np 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
矩阵分解部分本文科生已经看不懂了…跳过不记录了…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。