def inverse(A): if not A or len(A) != len(A[0]): raise Exception("Invalid input") length = len(A) res = append(A, eye(length)) for i in range(length): res[i] = Vector.multiply_integer(res[i], 1 / res[i][i]) for j in range(length): if i == j: continue res[j] = Vector.minus(res[j], Vector.multiply_integer(res[i], res[j][i])) for i in range(length): res[i] = res[i][length:] return res
def determinant(A): if not A or len(A) != len(A[0]): raise Exception("Invalid input") new_A = [[0] * len(A[0]) for _ in range(len(A))] for i in range(len(A)): for j in range(len(A)): new_A[i][j] = A[i][j] for i in range(len(A)): for j in range(i + 1, len(A)): new_A[j] = Vector.minus(new_A[j], Vector.multiply_integer(new_A[i], new_A[j][i] / new_A[i][i])) res = 1 for i in range(len(A)): res *= new_A[i][i] return res