我想编写一个函数,给定两个整数“n”和“p”,它生成所有 n 阶可逆矩阵,其中元素来自 {0,1,...,p-1}。 我有以下代码:
import itertools
import numpy as np
def invertible_matrices(n, p):
invertibleMatrices = set()
# generates all the possible matrices
x = [y for y in range(p)]
a = [j for j in itertools.product(x, repeat=n)]
b = {k for k in itertools.product(a, repeat=n)}
for each in b:
if np.linalg.det(each) != 0:
invertibleMatrices.add(each)
return invertibleMatrices
对于 n=2
和 p=2
工作正常,但对于 n=2
和 p=3
> 我得到 50
,而答案是 48
。
任何帮助将不胜感激。
p.s:如果你熟悉群论,我正在尝试找到 GL(n, p) 的所有元素(具有 p 个元素的有限域上的一般线性群)
最佳答案
我猜你想要模 p 的行列式(这是 GL(n,p) 上下文中的行列式,即在具有 p 元素的有限域上)。
if not np.isclose((np.linalg.det(each)+1)%p,1):
invertibleMatrices.add(each)
注意:+1 是为了避免出现小的数字错误。
关于python - 找到所有可逆方阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62424142/