Numpy7——数学2(矩阵基础,线性方程基础)

发布于:2025-06-11 ⋅ 阅读:(21) ⋅ 点赞:(0)

矩阵

一、数学中的矩阵

1、矩阵的基本定义和各种矩阵
  • 矩阵(Matrix)是由数字、符号或表达式按行(Row)和列(Column) 排列成的矩形阵列。
    • 矩阵一般由大写字母表示,例如A,B,M等
    • 矩阵中的元素由用小写字母加行列下标表示,如
      a ij 表示第 i 行第 j 列的元素。
  • 行矩阵(Row Matrix):只有一行(如 1×n)。
  • 列矩阵(Column Matrix):只有一列(如 n×1)
  • 方阵(Square Matrix):行数等于列数(如 n×n)
  • 单位矩阵:对角线上全是1,其余全是0,可写作I。
  • 对角矩阵(Diagonal Matrix):非对角线元素全为 0。
  • 对称矩阵(Symmetric Matrix):沿着左上到右下的对角线对折,两边元素相等。
  • 正交矩阵(Orthogonal Matrix):A的转置×A=I(单位向量),A就是正交矩阵
2、矩阵的运算
  • 矩阵加法、减法AB 必须都是 m × n 矩阵。
    两个相同维度的矩阵 A和 B可以相加、相减,返回一个矩阵
    例如:C = A + B , 其中 在这里插入图片描述

  • 矩阵数乘(标量乘法):一个矩阵A乘以一个标量k,得到一个矩阵
    例如:B = kA , 其中在这里插入图片描述

  • 矩阵乘法: 返回的是矩阵或标量
    矩阵乘法C = A × B 的定义:
    在这里插入图片描述

    • 条件:
      • A 是 m × n 矩阵, B 是 n × p 矩阵。
      • 结果 C 是 m × p 矩阵。
      • 不满足交换律(即,一般情况下 AB ≠ BA );满足结合律(矩阵顺序不变,仅计算顺序改变) 和 分配律
  • 矩阵转置(Transpose):将矩阵的行、列互换,返回一个矩阵在这里插入图片描述

3、矩阵的逆(Inverse):返回一个矩阵

对于一个方阵 A,如果存在 A-1 使得:A* A-1 = I(单位矩阵),则 A-1是 A 的逆矩阵
若 A* A-1 = A-1 * A = I (其中 I 是单位矩阵),则称 A 是可逆矩阵(Invertible Matrix)

  • 注意:
    不是所有的矩阵都有逆矩阵,仅方阵可能有逆矩阵。
    矩阵可逆的条件:行列式 det(A) ≠ 0(也就是满秩);且矩阵是方形矩阵。
  • 矩阵的逆的性质
    • A的逆的逆是A本身
    • AB的逆 是B的逆乘A的逆
    • A的逆的转置是A的转置的逆
4、矩阵的行列式 (返回一个标量)
  • 对于一个 n阶方阵 A(即 n×n 的矩阵),其行列式记作 det(A) 或 ∣A∣,行列式是一个标量值。
  • 行列式的计算
    在这里插入图片描述
    则n阶矩阵的行列式的计算公式为
    在这里插入图片描述
  • 行列式的性质:
    • 单位矩阵的行列式为1
    • 矩阵的行列式与其转置矩阵的行列式相同 :丨A丨 = 丨A.T丨
    • A@B的行列式 = A的行列式*B的行列式 : 丨A@B丨 = 丨A丨丨B丨
    • A-1 的行列式 = 1/A的行列式 :丨A-1丨 = 丨1/A丨
    • 行列式与初等行变换:
      • 交换两行:行列式变号。
      • 某行乘以标量 k:行列式乘以 k。
      • 某行加上另一行的倍数:行列式不变。

二、numpy中的基础矩阵

1、创建矩阵(二维数组)
  • 使用np.matrix
  • 使用np.ndarray转换
  • 使用zerosoneseye\identit 创建0矩阵、全是1的矩阵、单位矩阵
import numpy as np

# 从列表或嵌套列表创建
A = np.matrix([[1, 2], [3, 4]])  # 2x2 矩阵
B = np.matrix("1 2; 3 4")        # 使用 MATLAB 风格字符串(分号分隔行)

arr = np.array([[1, 2], [3, 4]])
M = np.matrix(arr)  # 将 ndarray 转为 matrix
# 输出:
# [[1, 2],
#  [3, 4]]
print(np.eye(2))
# [[1. 0.]
#  [0. 1.]]
print(np.ones((2,2)))
# [[1. 1.]
#  [1. 1.]]
print(np.zeros((2,2)))
# [[0. 0.]
#  [0. 0.]]
2、矩阵的运算
  • 元素级运算 : +, -, *, /, ** 等操作符执行元素级运算(逐个元素进行运算)。

    A = np.array([[1, 2], [3, 4]])
    B = np.array([[5, 6], [7, 8]])
    
    # 元素级加法
    print(A + B)  # [[6 8], [10 12]]
    
    # 元素级乘法
    print(A * B)  # [[5 12], [21 32]]
    
  • 矩阵的转置:使用 .T 属性或 np.transpose()。(A+B)T = AT+BT

  • 逆矩阵:调用 np.linalg.inv() ( inv(ABC) = inv©@inv(B)@inv(A))

  • 矩阵的行列式:使用np.linalg.det() 计算矩阵的行列式,得到一个标量。

  • 矩阵的迹(trace): 矩阵对角线元素的和,使用 np.trace

  • 对角矩阵:np.diag() 获取对角线元素或者创建对角矩阵。

A = np.array([[1, 2], [3, 4]])

print(A.T)  # 转置后:[[1 3], [2 4]]
print(np.linalg.inv(A)) # A的逆矩阵:[[-2.   1. ], [ 1.5 -0.5]]
print(np.linalg.det(A))  # 输出:-2.0000
  • 矩阵乘法(np.matmul):A是m×n的矩阵,B是n×p的矩阵,C=AB是m×p的矩阵,其中每个元素的计算方式为:
    在这里插入图片描述
    计算示例:


矩阵乘法满足结合律((AB)C = A(BC))、分配律(A(B+C) = AB+AC),不满足交换律(AB≠BA)
np.matmul(A.T, A) 一定是对称矩阵
np.matmul(单位矩阵, 任何矩阵)np.matmul(任何矩阵, 单位矩阵)的结果都是任何矩阵它自己

3、矩阵的四种看待方式
  • 原始定义 : 结果矩阵的第 i 行第 j 列是左矩阵的第 i 行与右矩阵的第 j 列的点积。
    在这里插入图片描述

  • 外积:左矩阵列向量与右矩阵的行向量的外积之和。(适用于低秩分解(如SVD)、并行计算优化)
    在这里插入图片描述

  • 列向量的组合:右矩阵的每一列是左矩阵的列向量的线性组合。(适用于计算机图形学、线性变换可视化)。矩阵A对向量b进行线性变换。

在这里插入图片描述

  • 行向量的组合:左矩阵的每一行是右矩阵的行向量的线性组合。(适用于优化问题、行空间分析)
    在这里插入图片描述
4、矩阵的秩、空间和线性方程
  • 线性相关性

    • 线性相关:两个向量A,B存在两个系数c1,c2(c1,c2不全为0),使得c1A + c2B = 0,则AB是线性相关的
    • 线性无关:只有在c1c2全为0的时候,c1A + c2B 才等于0
  • 矩阵的秩 numpy.linalg.matrix_rank:矩阵的秩是其行(或列)向量中线性无关的最大数目,记为rank(A)

    • A和A.T的秩相等
    • 秩 <= 最小维度,即rank(A(m行n列)) <= min(m,n)
    • 满秩矩阵:rank(A(m行n列)) = min(m,n),则A为满秩矩阵(当且仅当A为方阵的时候,A为可逆矩阵)
    • rank(AB) ≤ min(rank(A),rank(B)) :A@B的秩 小于等于 A的秩和B的秩之间的最小值
    • rank(A + B) ≤ rank(A) + rank(B) : A+B的秩 小于等于 A的秩 + B的秩
    • 秩的计算方法
      • 线性无关的列数和行数
      • 使用numpy.linalg.matrix_rank函数
      • 使用消元法(通过初等行变换,)将矩阵化为行最简形阶梯形矩阵,从而数出非零行,即为秩,
import numpy as np
A = np.array([[2, 1, 3], [1, 2, 1], [3, 2, 2]])
rank = np.linalg.matrix_rank(A)  # 输出: 3
  • 矩阵的空间
空间类型 定义 维度公式 意义
行空间(Row Space) 行向量的线性组合 rank(A) 输入空间的有效维度
列空间(Column Space) 列向量的线性组合 rank(A) 输出空间的像(Image)
零空间(Null Space) A x = 0 的解 n - rank(A) 解的冗余自由度
左零空间(Left Null Space) yT A = 0 n - rank(A) 转置矩阵的零空间
  • 线性方程
    方程组 Ax = b 的解取决于秩的关系:

    情况 解的性质 条件
    唯一解 存在且唯一 rank(A) = rank(A丨b) = n
    无穷多解 解空间 = 特解 + 零空间基 rank(A) = rank(A丨b) < n
    无解 方程组矛盾 rank(A) < rank(A丨b)
    • 求解方法:
      • 当A矩阵有唯一解的时候:使用np.linalg.solve(A, b)(解N元一次方程组AX = b,如果方程组中有 没有意义 的方程组,那么程序就会报错;方程组中的所有方程都有用则解是唯一的),或者使用A-1 Ax = A-1b => x = np.linalg.inv(A) @ b
      • 最小二乘解(无解时):np.linalg.lstsq(A, b)
      • 零空间基:scipy.linalg.null_space(A)