寻找矩阵误差的决定因素

时间:2017-03-18 17:43:54

标签: python matrix

我一直遇到这个错误,我无法弄清楚是什么问题。

 line 81, in determinant
    determinant += newMatrix[0][x] * (-1)**(2+x) * determinant(reduce_matrix(newMatrix,1,x+1))
TypeError: 'int' object is not callable

以下是两个函数的代码:

def reduce_matrix(M, i, j):
    newMatrix= [[x for x in y] for y in M]
    try:
        for k in range(len(newMatrix)):
            del(newMatrix[k][j-1])
        newMatrix.remove(newMatrix[i-1])
        return newMatrix
    except:
        print ("Row or column not in matrix")
        return M
def determinant(M):
    newMatrix= [[x for x in y] for y in M]
    if len(newMatrix) != len((newMatrix)[0]):
        print ("Not a square matrix")
    if (dimension(newMatrix))==(1,1):
        return newMatrix
    else:
        determinant = 0
        for x in range(len(newMatrix)):
            determinant += newMatrix[0][x] * (-1)**(2+x) * determinant(reduce_matrix(newMatrix,1,x+1))
        return determinant

1 个答案:

答案 0 :(得分:0)

您正在使用determinant作为函数名称和该函数内的局部变量。不好的想法,因为局部变量determinant会影响函数名称,并且您试图以递归方式调用该函数。

当Python解释器看到determinant(reduce_matrix(newMatrix,1,x+1))时,它所知道的唯一非阴影determinantint,当您为其分配0时,它就是det神秘的错误信息。

使用其他内容(例如det = 0 #rest of code, suitably adjusted )作为本地变量:

SELECT DISTINCT co.item_name
    ,SUBSTRING((
            SELECT ',' + ca.attr_val AS [text()]
            FROM [CONTRACT_ATTR] CA
            WHERE CA.Item_Id = CO.Item_Id
                AND ca.field_id = 239
            ORDER BY co.item_name
            FOR XML PATH('')
            ), 2, 1000) GM_PROG
FROM [dbo].[CONTRACT] CO;