矩阵乘法--Python

发布于:2025-05-25 ⋅ 阅读:(24) ⋅ 点赞:(0)

一、问题引入

在这里插入图片描述
输入格式:
第一行为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 sys
    input = sys.stdin.read().split()
    ptr = 0
    
    # 读取矩阵维度
    n = int(input[ptr])
    m = int(input[ptr+1])
    k = int(input[ptr+2])
    ptr += 3
    
    # 读取矩阵A
    A = []
    for _ in range(n):
        row = list(map(int, input[ptr:ptr+m]))
        A.append(row)
        ptr += m
    
    # 读取矩阵B
    B = []
    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()配合指针移动的方法,可以高效处理多行矩阵输入,这种技巧对后续处理其他结构化数据很有借鉴意义。在调试阶段,我添加了矩阵维度验证环节,这培养了我的防御性编程思维。最终的输出格式化处理也让我意识到,算法实现不仅要关注计算正确性,还需严格满足输出规范。


网站公告

今日签到

点亮在社区的每一天
去签到