欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 矩阵乘法--Python

矩阵乘法--Python

2025/5/25 21:29:25 来源:https://blog.csdn.net/bj3281/article/details/148196472  浏览:    关键词:矩阵乘法--Python

矩阵乘法

  • 一、问题引入
  • 二、解题步骤
    • 1.思维导图
    • 2.解题步骤
  • 三、代码实现
  • 四、个人小结

一、问题引入

在这里插入图片描述
输入格式:
第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于20
然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于5000。

输出格式:
输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。

输入样例:
在这里给出一组输入。例如:

3 2 3
1 1
1 1
1 1
1 1 1
1 1 1

输出样例:

2 2 2
2 2 2
2 2 2

二、解题步骤

1.思维导图

在这里插入图片描述

2.解题步骤

  1. 输入处理阶段
    ◦ 读取第一行获取矩阵维度:n(矩阵A行数), m(矩阵A列数/矩阵B行数), k(矩阵B列数)
    ◦ 读取接下来的n行,构建n×m的矩阵A
    ◦ 读取接下来的m行,构建m×k的矩阵B
  2. 矩阵乘法验证
    ◦ 检查矩阵A的列数(m)是否等于矩阵B的行数(len(B))
    ◦ 如果不匹配,输出错误信息并终止程序
  3. 矩阵乘法计算
    ◦ 初始化结果矩阵C为n×k的零矩阵
    ◦ 使用三重循环计算:
    ■ 外层循环遍历矩阵A的每一行(i)
    ■ 中层循环遍历矩阵B的每一列(j)
    ■ 内层循环计算A的第i行与B的第j列的点积(l)
    ◦ 计算公式:C[i][j] = Σ(A[i][l] * B[l][j]),其中l从0到m-1
  4. 结果输出
    ◦ 遍历结果矩阵C的每一行
    ◦ 将每行元素转换为字符串并用空格连接
    ◦ 逐行打印输出
  5. 边界条件处理
    ◦ 处理输入可能的多余空格或空行
    ◦ 确保矩阵元素绝对值不超过5000(题目给定条件)
    ◦ 维度n,m,k均小于20(题目给定条件)

三、代码实现

def main():import sysinput = sys.stdin.read().split()ptr = 0# 读取矩阵维度n = int(input[ptr])m = int(input[ptr+1])k = int(input[ptr+2])ptr += 3# 读取矩阵AA = []for _ in range(n):row = list(map(int, input[ptr:ptr+m]))A.append(row)ptr += m# 读取矩阵BB = []for _ in range(m):row = list(map(int, input[ptr:ptr+k]))B.append(row)ptr += k# 检查矩阵乘法是否可行if m != len(B):print(f"Error: {m} != {len(B)}")return# 计算矩阵乘积C = [[0]*k for _ in range(n)]for i in range(n):for j in range(k):C[i][j] = sum(A[i][l] * B[l][j] for l in range(m))# 输出结果for row in C:print(' '.join(map(str, row)))if __name__ == "__main__":main()

四、个人小结

通过本次矩阵乘法实验,我深入理解了矩阵运算的基本原理与Python实现方法。实验初期,我先通过数学理论复习了矩阵乘法的定义——只有当第一个矩阵的列数等于第二个矩阵的行数时,乘法才有意义,结果矩阵的行列数分别取两个矩阵的行数和列数。在代码实现环节,我掌握了用三重循环实现矩阵乘法的核心逻辑:外层循环遍历结果矩阵的行,中层循环遍历列,内层循环完成点积运算。这种嵌套循环结构让我直观理解了矩阵乘法"行乘列"的本质特性。

实验过程中,我特别注意到输入处理的重要性。通过使用sys.stdin.read()配合指针移动的方法,可以高效处理多行矩阵输入,这种技巧对后续处理其他结构化数据很有借鉴意义。在调试阶段,我添加了矩阵维度验证环节,这培养了我的防御性编程思维。最终的输出格式化处理也让我意识到,算法实现不仅要关注计算正确性,还需严格满足输出规范。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词