在没有第三方库的情况下反转Matricies Python

时间:2017-02-27 17:52:41

标签: python matrix linear-algebra

我需要使用python反转包含浮点数的矩阵,但不使用第三方库(即numpy)。以这种方式反转矩阵的计算密集度最低的方法是什么?

我试图使用辅因子矩阵的转置乘以倒数行列式等于逆矩阵的事实。但是我很确定递归方法花了太长时间:

def getMatrixMinor(m,i,j):
    return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]

def getMatrixDeternminant(m):
if len(m) == 2:
    return m[0][0]*m[1][1]-m[0][1]*m[1][0]
    determinant = 0
    for c in range(len(m)):
        determinant += ((-1)**c)*m[0][c]*getMatrixDeternminant(getMatrixMinor(m,0,c))
return determinant

def getMatrixInverse(m):
determinant = getMatrixDeternminant(m)
if len(m) == 2:
    return [[m[1][1]/determinant, -1*m[0][1]/determinant],
            [-1*m[1][0]/determinant, m[0][0]/determinant]]
cofactors = []
for r in range(len(m)):
    cofactorRow = []
    for c in range(len(m)):
        minor = getMatrixMinor(m,r,c)
        cofactorRow.append(((-1)**(r+c)) * getMatrixDeternminant(minor))
    cofactors.append(cofactorRow)
cofactors = transposeMatrix(cofactors)
for r in range(len(cofactors)):
    for c in range(len(cofactors)):
        cofactors[r][c] = cofactors[r][c]/determinant
return cofactors

如果格式很奇怪,请道歉。

1 个答案:

答案 0 :(得分:0)

伴随矩阵的反转基本上只有理论值。

计算效率高的方法从不涉及计算决定因素等。看看Gaussian elimination,这需要高中数学来理解,并且或多或少是这种“努力”的标准起点。