白羽啊


私信TA

用户名:723822380

访问量:3188

签 名:

等  级
排  名 4468
经  验 1691
参赛次数 0
文章发表 22
年  龄 0
在职情况 学生
学  校 泉师
专  业

  自我简介:

解题思路:矩阵乘法->以两个二阶矩阵举例,即第一个矩阵的第一行数据分别乘以对应的第二个矩阵的第一列数据,

                                以题目中的例子来说,即结果矩阵的(0,0)点的数值等于第一个矩阵(0,0)*第二个矩阵(0,0)+第一个矩阵(0,1)*第二个矩阵(1,0)=1*1+2*3=7

                                所以我的思路就放在如何将不同矩阵的行与列的数值之间在数组中的索引进行统一上

                                即一个索引值可以既表示第一个矩阵的第一行,同时也可以表示第二个矩阵的第一列:详见代码

注意事项:

参考代码:

n, m = map(int, input().strip().split())
matrix_row = []
matrix_column = []

for i in range(n):
    matrix_row.extend(list(map(int, input().strip().split())))  # 将矩阵以行为存储顺序

if m == 0: # 幂次数为0时为特殊矩阵,除对角线为1,其余位置均为0
    for a in range(n):
        for b in range(n):
            if a == b:
                print(1, end = " ")
            else:
                print(0, end = " ")
        print()
else:
    for p in range(n):
        for q in range(n):
            matrix_column.append(matrix_row[p + q * n])  # 此处为核心!!!将矩阵以列为存储顺序重排

    matrix_mul = matrix_row.copy()  # 存储当前矩阵值

    for a in range(m - 1):
        temp = []
        for r in range(n):
            for c in range(n):  # 注意!此处不能直接将得到的值立刻覆盖原矩阵值,否则下面代码会调用修改后的当前矩阵值,导致后续数据错误
                temp.append(sum(
                    list(map(lambda x, y: x * y, matrix_mul[r * n:(r + 1) * n], matrix_column[c * n:(c + 1) * n]))))
        matrix_mul = temp  # 每乘完完整的一个矩阵,就更新一次矩阵值
    for r in range(n):
        for c in range(n):
            print(matrix_mul[r * n + c], end = " ")
        print()


 

0.0分

1 人评分

  评论区

我擦 写这么复杂
2022-03-05 20:55:13
  • «
  • 1
  • »