numpy中的常用线性代数

2020-12-28  本文已影响0人  MatrixYe

1.创建向量

narray中的行向量shape=(1,m) 和列向量shape=(m,1)都不是数学意义上的向量,在用于线性代数的计算时,向量的表示方式为shape=(m,)

v = np.array([0, 1, 2]) # 真实向量 shape=(3,),此时,向量的转置T等于其本身
# v = np.array([[0, 1, 2]]) # 行向量 shape=(1,3)
# v = np.array([[0], [1], [2]]) # 列向量 shape=(3,1)

结果为\vec{v}=\left[\begin{array}{l}0 \\1 \\2\end{array}\right]

2.创建矩阵

matrix = np.mat([[1, 2], [3, 4]])

3.矩阵转置

# 转置
matrix = np.mat([[1, 2], [3, 4]])
matrix.T

结果为\left[\begin{array}{l}1 &3\\2 & 4\end{array}\right]\\

4.矩阵的秩

# 秩
matrix = np.mat([[1, 2], [3, 4]])
np.linalg.matrix_rank(matrix)

结果为2,任意矩阵的秩等于其列秩,即行数

5.矩阵行列式

# 行列式
matrix = np.mat([[1, 2], [3, 4]])
np.linalg.det(matrix)

结果为为-2,如果该矩阵为非方阵,那么计算行列式时会抛出异常

6.特征值和特征向量

# 特征向量和特征值
matrix = np.mat([[1, 2], [3, 4]])
eigenvalues, eigenvectors = np.linalg.eig(matrix)

结果为\lambda_1=-0.37228132 \lambda_2=5.37228132,\vec{v_1}=[-0.82456484 -0.41597356],,\vec{v_2}= [ 0.56576746 -0.90937671]

7.逆矩阵

# 矩阵的逆
m = np.mat([[1, 2], [3, 4]])
result = np.linalg.inv(m)

结果为 [[-2. 1. ],[ 1.5 -0.5]]

8.矩阵的左乘

m1 = np.mat([[1, 2], [3, 4]])
m2 = np.mat([[0, 1], [1, 2]])
np.dot(m1, m2)
# 等价于 m1 @ m2

结果为m1x m2为 [[ 2 5], [ 4 11]],m2 x m1为 [[ 3 4],[ 7 10]]矩阵相乘有顺序,因此结果不同。

9. 矩阵乘向量

v=np.array([1,2,3])
m=np.mat([[1,2,3],[1,0,1]])
np.dot(m,v)

计算结果为 [[1 4 9]] 这里被转化为shape(1,3),得到的结果实际上是matrix。

10.向量的内积

v1 = np.array([0,2,1])
v2 = np.array([2,0,1])
inner_product = v1 @ v2
# inner_product = np.inner(v1, v2) # 等价于

结果为1

11.向量的叉积

np中的 外积的含义并不是线性代数中的外积或叉积概念,在np中,求两个向量的叉积

# 求叉积
v1 = np.array([0,2,1])
v2 = np.array([2,0,1])
cross_product=np.cross(v1,v2)

结果为[ 2 2 -4],叉积的结果即线性代数中的外积,叉积是一个向量,该向量垂直于v1、v2所张成的平面中,且范数为v1、v2构成的面积。

12.方程求解

# 方程求解mx=y,求x
m=np.array([[1,0],[0,1]]) # m
y=np.array([[2,0],[0,2]]) # y
result=np.linalg.solve(m,y) # x
print(result)
上一篇下一篇

猜你喜欢

热点阅读