首页 > 解决方案 > 没有numpy的python逆矩阵

问题描述

我无法弄清楚我的代码有什么问题,这令人沮丧。我必须制作逆矩阵函数,我认为我已经完成了。我不知道为什么它不起作用。问题可能与星星有关,在这一步之后,我的矩阵名为 mat 更改为单位矩阵,但为什么呢?在加星之前,它会正常打印我赋予功能的垫子矩阵,但在加星之后,它是一个单位矩阵,我不明白为什么会发生这种情况。这是我所拥有的:

def identity_matrix_convertion(m):
    x = m[:]
    for i in range(len(x)):
        for j in range(len(x[0])):
            if i == j:
                x[i][j] = 1
            else:
                x[i][j] = 0
    return x

def inverse_matrix(mat):
    n = len(mat)
    am = mat[:]
    show_matrix(mat)
    **i = identity_matrix_convertion(am)**
    show_matrix(mat)
    im = i[:]
    ind = list(range(n))
    print(len(mat))
    if determinant(mat) == 0:
        print("This matrix doesn't have an inverse.")
    if len(mat) == len(mat[0]):
        for i in range(n):
            scal = 1.0 / am[i][i]
            for j in range(n):
                am[i][j] *= scal
                im[i][j] *= scal
            for k in ind[0:i] + ind[i + 1:]:
                current_scal = am[k][i]
                for l in range(n):
                    am[k][l] = am[k][l] - current_scal * am[i][j]
                    im[k][l] = im[k][l] - current_scal * im[i][j]
    return im

so after line **i = identity_matrix_convertion(am)** my mat matrix is changed into identity matrix, but why?

    The result is:
    
    1.0 2.0 3.0 
    2.0 1.0 3.0 
    4.0 3.0 2.0 
    
    The result is:
    1 0 0 
    0 1 0 
    0 0 1 

标签: pythonmatrix-inverse

解决方案


您应该添加以下代码段,而不是x = m[:]在函数中说明:identity_matrix_convertion()

x = []
for i in m:
    arr = [a for a in i]
    x.append(arr)

x = m[:]仍在引用 m 而不仅仅是复制。


推荐阅读