矩阵加法要求同型,对应元素相加,时间复杂度o(m×n);乘法要求内维相容,行乘列求和,时间复杂度o(m×p×n),需校验维度并注意内存布局与溢出。

矩阵的加法和乘法在数组实现中,核心是按数学定义映射到二维数组(或一维数组模拟)的索引操作,关键在于维度匹配与循环逻辑的正确性。
加法:对应元素相加,要求同型
两个矩阵 A 和 B 能相加,当且仅当它们行数相同、列数也相同。用二维数组 a[m][n] 和 b[m][n] 表示时,结果矩阵 c[m][n] 满足:c[i][j] = a[i][j] + b[i][j](对所有 i ∈ [0, m), j ∈ [0, n))。
- 遍历只需两层嵌套循环,时间复杂度 O(m×n)
- 无需额外空间可原地计算(若允许修改原数组),否则需分配新数组存储结果
- 实际编码前应先校验
a与b的行列数是否一致,避免越界或逻辑错误
乘法:行乘列求和,要求内维相容
矩阵 A(m×p)乘以矩阵 B(p×n),结果 C 是 m×n 矩阵,其中:c[i][j] = Σ(k=0 to p−1) a[i][k] * b[k][j]。
- 外层两层循环遍历结果矩阵的行 i 和列 j,最内层循环累加 k 从 0 到 p−1
- 时间复杂度为 O(m×p×n),比加法高一个量级
- 必须确保 A 的列数等于 B 的行数,否则乘法未定义;运行时应做参数检查
- 若用一维数组模拟(如 row-major 存储),元素访问改为
a[i * p + k]和b[k * n + j]
常见实现细节提醒
数组实现时容易忽略边界与内存布局,几个实用注意点:
- C/C++ 中二维数组传参需固定列数(如
int mat[][N]),或改用指针+尺寸参数方式 - Java/Python 等语言可用 List
- > 或 numpy.ndarray,但底层仍依赖索引映射逻辑
- 避免整数溢出:尤其乘法中累加项可能远大于单个元素,必要时用 long 或检查范围
- 稀疏矩阵不适用此朴素实现,应换用三元组、CSR 等结构优化
简单示例(3×2 × 2×4 → 3×4)
设 A 是 3 行 2 列,B 是 2 行 4 列,则 C[i][j] 由 A 第 i 行与 B 第 j 列点积得到:
例如 c[0][0] = a[0][0]×b[0][0] + a[0][1]×b[1][0],共 3×4×2 = 24 次乘法运算。
- 代码中 i 循环 0~2,j 循环 0~3,k 循环 0~1
- 每算一个 c[i][j],都重置累加器 sum = 0,再执行 k 循环
- 写完后建议用单位矩阵、零矩阵等特例验证逻辑是否正确











