使用for循环的Python高斯消除

时间:2017-10-08 02:12:37

标签: python variables for-loop vectorization linear

我试图编写代码,使用for循环而不是矢量化在矩阵上执行高斯消元法。我的代码如下:

def myGaussJordan(A,m):     """     在A上执行Gauss Jordan消除。

A: a square matrix.
m: the pivot element is A[m, m].
Returns a matrix with the identity matrix 
on the left and the inverse of A on the right. 
"""
B = np.column_stack((A,np.identity(m)))
C = B
for i in range(0,m):
    B[i,] = B[i,]/B[i,i]
    tmp = list(range(0,m))
    tmp.remove(i) ## remove the row since we only operate on other rows
    for j in tmp:
        for k in range(0,(2*m)):
            B[j,k] =  C[j,k] - C[i,k]*(C[j,i]/C[i,i])
    C = B

函数返回np.array B

return B

我需要C,以便在B的右侧跟踪行操作,以生成逆矩阵。通过调试器,似乎第一个" k"循环按预期工作,但是一旦C = B,Python会在后续代码中同时更新C和B,从而导致错误。

另外我注意到我向k循环了,相同的代码运行良好。此外,我运行在R中编码的相同方法,它可以工作,所以我很困惑。

我是否遗漏了Python对变量或缩进的分配?

0 个答案:

没有答案