gpt4 book ai didi

python - 使用 Python 执行模块化矩阵求逆的最简单方法?

转载 作者:IT老高 更新时间:2023-10-28 20:47:23 27 4
gpt4 key购买 nike

我想在 Python 中采用像 [[1,2],[3,4]] mod 7 这样的矩阵的模逆。我看过 numpy (它做矩阵求逆但不是模矩阵求逆),我在网上看到了一些数论包,但似乎没有什么可以做这个相对常见的过程(至少,它对我来说似乎相对常见)。

顺便说一下,上面矩阵的逆矩阵是[[5,1],[5,3]](mod 7)。不过,我希望 Python 为我做这件事。

最佳答案

好的...对于那些关心的人,我解决了我自己的问题。我花了一段时间,但我认为这是可行的。它可能不是最优雅的,应该包含更多的错误处理,但它确实有效:

import numpy
import math
from numpy import matrix
from numpy import linalg

def modMatInv(A,p): # Finds the inverse of matrix A mod p
n=len(A)
A=matrix(A)
adj=numpy.zeros(shape=(n,n))
for i in range(0,n):
for j in range(0,n):
adj[i][j]=((-1)**(i+j)*int(round(linalg.det(minor(A,j,i)))))%p
return (modInv(int(round(linalg.det(A))),p)*adj)%p

def modInv(a,p): # Finds the inverse of a mod p, if it exists
for i in range(1,p):
if (i*a)%p==1:
return i
raise ValueError(str(a)+" has no inverse mod "+str(p))

def minor(A,i,j): # Return matrix A with the ith row and jth column deleted
A=numpy.array(A)
minor=numpy.zeros(shape=(len(A)-1,len(A)-1))
p=0
for s in range(0,len(minor)):
if p==i:
p=p+1
q=0
for t in range(0,len(minor)):
if q==j:
q=q+1
minor[s][t]=A[p][q]
q=q+1
p=p+1
return minor

关于python - 使用 Python 执行模块化矩阵求逆的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com