Python,Matrix Determinant

# Matrix Determinant
# https://www.codewars.com/kata/52a382ee44408cea2500074c/train/python


def determinant(matrix):
    if len(matrix) == 1:#len()只能传入真正的列表,不能传入生成器
        return matrix[0][0]
    else:
        det = 0
        for i in range(len(matrix)):
            # [row[:i]+row[i+1:]] for row in matrix[1:]是一个生成器,不能使用len()计算长度
            # 生成器在每次调用next()时才会计算下一个值,所以不能使用len()计算长度
            sub_matrix = [row[:i]+row[i+1:] for row in matrix[1:]]
            det += ((-1)**i)*matrix[0][i]*determinant(sub_matrix)
        return det
# def determinant(matrix):
#     if len(matrix) == 1:#len()只能传入真正的列表,不能传入生成器
#         return matrix[0][0]
#     elif len(matrix) == 2:
#         return matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]
#     else:
#         det = 0
#         for i in range(len(matrix)):
#             # [row[:i]+row[i+1:]] for row in matrix[1:]是一个生成器,不能使用len()计算长度
#             # 生成器在每次调用next()时才会计算下一个值,所以不能使用len()计算长度
#             sub_matrix = [row[:i]+row[i+1:] for row in matrix[1:]]
#             det += ((-1)**i)*matrix[0][i]*determinant(sub_matrix)
#         return det


# best practice
import numpy as np

def determinant(a):
    # round(number,ndigits)将浮点数number四舍五入到指定的ndigits位数,如果ndigits为负数,则四舍五入到小数点左边的位置
    # 如果ndigits省略或为None,则四舍五入到整数
    # numpy.linalg是numpy的一个子模块,是线性代数库,包含了线性代数的函数
    # numpy.linalg.det()计算矩阵的行列式,传入的参数的类型必须是numpy的矩阵
    # numpy.matrix()将一个数组转换为矩阵, 可以传入一个列表,一个元组,一个numpy数组,一个numpy矩阵等
    return round(np.linalg.det(np.matrix(a)))
#numpy是一个强大的科学计算库,主要用于处理大型多维数组和矩阵运算
posted @ 2025-03-25 15:15  Kazuma_124  阅读(25)  评论(0)    收藏  举报