当前位置: 首页 > article >正文

【算法】 矩阵乘法与矩阵快速幂 python




矩阵乘法

模板

https://www.acwing.com/problem/content/1304/

import sys  
input = lambda: sys.stdin.readline().strip()  
  
n, m = map(int, input().split())  
A = [list(map(int, input().split())) for _ in range(n)]  
p = int(input())  
B = [list(map(int, input().split())) for _ in range(m)]  
  
ans = [[0] * p for _ in range(n)]  
for i in range(n):  
    for j in range(p):  
        for k in range(m):  
            ans[i][j] += A[i][k] * B[k][j]  
              
for row in ans:  
    print(*row)


矩阵快速幂

快速幂算法的核心是利用指数的二进制分解。

def mat_pow(A, k):  
    n = len(A)  
    ans = [[1 if i == j else 0 for j in range(n)] for i in range(n)]  
    while k > 0:  
        if k & 1:  
            ans = mat_mul(ans, A)  
        A = mat_mul(A, A)  
        k >>= 1  
    return ans


模板

https://www.luogu.com.cn/problem/P3390

import sys  
input = lambda: sys.stdin.readline().strip()  
  
mod = 10 ** 9 + 7  
def mat_mul(A, B):  
    n = len(A)  
    m = len(A[0])  # m = len(B)  
    p = len(B[0])  
  
    C = [[0] * p for _ in range(n)]  
    for i in range(n):  
        for j in range(p):  
            for k in range(m):  
                C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % mod  
    return C  
  
def mat_pow(A, k):  
    n = len(A)  
    ans = [[1 if i == j else 0 for j in range(n)] for i in range(n)]  
    while k > 0:  
        if k & 1:  
            ans = mat_mul(ans, A)  
        A = mat_mul(A, A)  
        k >>= 1  
    return ans  
  
n, k = map(int, input().split())  
A = [list(map(int, input().split())) for _ in range(n)]  
ans = mat_pow(A, k)  
for row in ans:  
    print(*row)


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢


http://www.kler.cn/a/596510.html

相关文章:

  • 机器学习——KNN超参数
  • 从PGC到AIGC:海螺AI多模态内容生成系统的技术革命
  • Docker 部署医学影像 DICOM 服务器 Orthanc
  • [node] 3 path与http
  • 美国国家数据浮标中心(NDBC)
  • 软考程序员-操作系统基本知识核心考点和知识重点总结
  • SQL授予用户查询某个模式或者具体某个表
  • VideoHelper 油猴脚本,重塑你的视频观看体验
  • [01-01-02].第02节:开发工具 - Pycharm使用
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(六)
  • Springboot集成Debezium监听postgresql变更
  • Assembly语言的软件工程
  • AI密码学
  • Windows Server 2025 使用 IIS 搭建 ASP.NET 3.5 网站
  • 【免费】2000-2019年各省地方财政房产税数据
  • Redis分布式锁如何实现——简单理解版
  • 题单:排队接水1
  • form 表单内容序列化成一个字符串
  • MyBatis之参数传递
  • 代码随想录算法训练营第十四天(2)|151.翻转字符串里的单词