import numpy
def gao_si(m1):
"""
:param m1: 待求值的n阶行列式
:return: 行列式的值
"""
x = len(m1)
for po in range(x - 1):
if m1[po, po]:
rem = m1[po, po]
#行操作
for c in range(po, x):
m1[po, c] = m1[po, c] / rem
#列操作
for m in range(po+1, x): #固定行
rem1 = m1[m, po]
for n in range(po, x):
m1[m, n] -= rem1 * m1[po, n]
else:
for cur in range(po+1, x):
if m1[cur, po]:
tmp = m1[cur]
tmp1 = tmp.copy()
m1[cur] = m1[po]
m1[po] = tmp1
return gao_si(m1)
else:
if cur == x-1:
return 0.0
num = 1
for i in range(x):
num *= m1[i, i]
return num