用numpy 实现矩阵的运算
2019-03-21 本文已影响0人
一百万个不确定
-
定义矩阵
例如:定义如下矩阵
_B = [[3,5,7],[4,6,8]]
B = np.asarray(_B)
B
结果:
array([[3, 5, 7],
[4, 6, 8]])
A=np.mat("3 5 7;4 6 8")
print(A)
结果:
[[3 5 7]
[4 6 8]]
-
矩阵的基本运算
-
加(减)法
_B = [[1,3,1],[1,0,0]] B = np.asarray(_B) _A = [[0,0,5],[7,5,0]] A = np.asarray(_A) A+B array([[1, 3, 6], [8, 5, 0]])
-
-
数乘
_A = [[1,8,-3],[4,-2,5]] A = np.asarray(_A) 2*A array([[ 2, 16, -6], [ 8, -4, 10]])
-
转置
使用A.T 来表达转置
_A = [[1,2,3],[0,6,-7]] A = np.asarray(_A) print(A) print(A.T) [[ 1 2 3] [ 0 6 -7]] [[ 1 0] [ 2 6] [ 3 -7]]
-
矩阵乘法
使用matmul()方法
_B = [[1,0,2],[-1,3,1]] B = np.asarray(_B) _A = [[3,1],[2,1],[1,0]] A = np.asarray(_A) np.matmul(B,A) array([[5, 1], [4, 2]])
-
求解线性方程组
使用np.linalg.solve()方法
考虑以下线性方程:3*x + y = 9 x + 2y = 8
a = np.array([[3,1], [1,2]]) b = np.array([9,8]) x = np.linalg.solve(a, b) x array([ 2., 3.])
-
求逆矩阵
使用np.linalg.inv()函数
A =
求 =
=
A=np.mat(np.array([[0,3],[3,4]])) #求A 的逆矩阵 A_=np.linalg.inv(A) print("A的逆矩阵:\n",A_) #验证A*A_是否是单位矩阵 print("A*A_:\n",A*A_) A的逆矩阵: [[-0.44444444 0.33333333] [ 0.33333333 0. ]] A*A_: [[ 1. 0.] [ 0. 1.]]
-
行列式
使用np.linalg.det()函数
import numpy as np b = np.array([[6,1,1], [4, -2, 5], [2,8,7]]) print (b) print (np.linalg.det(b)) print (6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2)) [[ 6 1 1] [ 4 -2 5] [ 2 8 7]] -306.0 -306
-
特征值与特征矢量
使用np.linalg.eig()方法
A=np.mat("3 -2;1 0") # 求特征值 和 特征向量 eigenvalues,eigvector=np.linalg.eig(A) print("特征值:",eigenvalues) print("特征向量:\n",eigvector)
-
对称
$#todo
-
正定性
$#todo