python 没有numpy的逆矩阵

python inverse matrix without numpy

我无法弄清楚我的代码有什么问题,这真令人沮丧。 我必须制作逆矩阵函数,我认为我已经完成了。我不知道为什么它不起作用。问题可能是与stars一致,在这一步之后我的名为mat的矩阵被更改为identity matrix,但是为什么呢?在 stars 之前,它打印我的 mat matrix normaly,我赋予它功能,但在 stars 之后,它是一个单位矩阵,我不明白为什么会这样。这是我拥有的:

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 

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

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

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

根据@NumberC 的回答,x = m[:] 确实制作了一份副本,但只是一份浅表副本。复制的列表将包含对其他列表的内部列表的引用,因此在 x 中操作这些列表也会导致 m 中的更改。这是因为我们将二维矩阵表示为列表的列表。如果有人重新排序 m 中的列表(因此不是列表中的项目,而是 m 中列表的纯顺序),顺序将在 x 副本中保持不变。但是,列表 列表中的任何更改 也会改变另一个。我希望这不会造成混淆,List changes unexpectedly after assignment. Why is this and how can I prevent it? 有一些数字。

因为我们不必吓跑 [:] 我们仍然可以说:

x = new_list = [y[:] for y in m]

甚至更好:我们可以使用 built-in copy 模块(随处可用):

import copy
x = copy.deepcopy(m)

另请参阅:Copying nested lists in Python