蓝桥杯基础题【vip】:矩阵乘法 矩阵幂 python 基础解法 逻辑清晰

题目要求:

给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:         
  A =       A的2次幂 =
      1 2         	7 10
      3 4         	15 22

输入格式
  第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
  输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
    2 2
    1 2
    3 4
样例输出
    7 10
    15 22

解题方法:
求幂,相当于求多次乘法,所以核心就是矩阵乘法

def Multi(matrixA,matrixB):  # 目标:C_r*p = A_r*s * B_s*p
    r = len(matrixA)         # A的行数
    s = len(matrixB[0])      # B的列数
    p = len(matrixB)         # B的行数(=A的列数)
    matrixC= [[0]* p for i in range(r)] # 初始化矩阵C
    for i in range(r):
        for j in range(s):
            for k in range(p):
                matrixC[i][j] += matrixA[i][k]*matrixB[k][j]
    return matrixC

def MatrixPower(arr,M):
    if M==0: # 幂次
        N = len(arr)  # 阶数
        matrixE = [[0] * N for i in range(N)]
        for i in range(N):
            for j in range(N):
                if i == j:
                    matrixE[i][j] = 1  # 单位阵
        return matrixE
    if M==1:
        return arr
    else:
        brr = arr
        while M!=1:
            M=M-1
            brr = Multi(arr,brr)
        return brr

if __name__ == '__main__':
    N,M = map(int,input().split())  # 阶数、幂
    arr=[]
    for i in range(N):
        arr.append(list(map(int,input().rstrip().split()))) # 输入矩阵
    #print(arr) # [[1, 2], [3, 4]]

    #求矩阵幂,返回矩阵
    brr = MatrixPower(arr,M)

    #print(brr) # [[7, 10], [15, 22]]
    for i in range(N):
        for j in range(N):
            print(brr[i][j],end=' ')
        print()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值