每日kata~14~Matrix Determinant

题目

Write a function that accepts a square matrix (N x N 2D array) and returns the determinant of the matrix.

How to take the determinant of a matrix -- it is simplest to start with the smallest cases:

A 1x1 matrix |a| has determinant a.

A 2x2 matrix [ [a, b], [c, d] ] or

|a  b|
|c  d|

has determinant: ad - bc.

The determinant of an n x n sized matrix is calculated by reducing the problem to the calculation of the determinants of n matrices ofn-1 x n-1 size.

For the 3x3 case, [ [a, b, c], [d, e, f], [g, h, i] ] or

|a b c|  
|d e f|  
|g h i|  

the determinant is: a * det(a_minor) - b * det(b_minor) + c * det(c_minor) where det(a_minor) refers to taking the determinant of the 2x2 matrix created by crossing out the row and column in which the element a occurs:

|- - -|
|- e f|
|- h i|  

Note the alternation of signs.

The determinant of larger matrices are calculated analogously, e.g. if M is a 4x4 matrix with first row [a, b, c, d], then:

det(M) = a * det(a_minor) - b * det(b_minor) + c * det(c_minor) - d * det(d_minor)

看了半天才看明白题,求矩阵行列式

def determinant(matrix):
    res = 0
    l = len(matrix)
    if l==1:
        res = matrix[0][0]
    elif l==2:
        res = matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]
    else:
        for i in range(0,l):
            sub_matrix = []
            sub_matrix = [m[0:i]+m[i+1:] for m in matrix[1:]]
            res += matrix[0][i]*(-1)**i*determinant(sub_matrix)

    return res

递归 & 切片!

你可能感兴趣的:(每日kata~14~Matrix Determinant)