如何使用 python 查找矩阵的行列式

How to find determinant of matrix using python

python 的新课程,线性代数的生锈课程。但是,我正在寻找有关在不使用 Numpy 的情况下从 python 中的矩阵创建行列式的正确方法的指导。请参阅下面的代码片段。非常感谢任何帮助。

import math 
from math import sqrt
import numbers 
import operators

def determinant(self)

        if not self.is_square():
            raise(ValueError, "Cannot calculate determinant of non-square matrix.")
        if self.h > 2:
            raise(NotImplementedError, "Calculating determinant not implemented for matrices larger than 2x2.")


        |x| = A

    det(A) = [[A, B][C, D]]

    assert self.rows == A.cols
    assert self.row > 1
    term_list = []

sum 是内置函数,不能用作变量名。代码未正确缩进。这应该有效:

def determinant(matrix, mul):

    width = len(matrix)
    if width == 1:
        return mul * matrix[0][0]
    else:
        sign = -1
        answer = 0
        for i in range(width):
            m = []
            for j in range(1, width):
                buff = []
                for k in range(width):
                    if k != i:
                        buff.append(matrix[j][k])
                m.append(buff)
            sign *= -1
            answer = answer + mul * determinant(m, sign * matrix[0][i])
    return answer

test_matrix = [[3,2,-3],[7,-1,0],[2,-4,5]]

print(determinant(test_matrix, 1))

这样就可以得到非方阵的行列式。也许这是没有意义的,但我发现它在 jupyter notebook 中的这个实现很有用,因为避免了对异常使用 try 的需要,有时它很有趣非方阵的零输出。

import sympy as sp
import numpy as np

A=np.array([[1,1],[1,2],[-2,-4]])
sp.Matrix(A)

B = np.hstack((A,np.array([[0],[0],[0]])))
sp.Matrix(B)

def determinant(A):
  if len(sp.Matrix(A).rref()[1]) < max(np.shape(A)):
    return 0
  else:
    return np.linalg.det(A)

determinant(A)
0
determinant(B)
0
np.linalg.det(A)  -----> ERROR