尝试查找 N*N 矩阵的行列式时出现非类型错误

Getting Non-Type error while trying to find the determinant of an N*N matrix

我正在尝试编写一个程序来查找 N*N 矩阵的行列式,这是我的代码:

from copy import deepcopy

n = input()
myMatrix = []

for i in range(n):
    myMatrix.append(raw_input().split())

def findMinor(matrix, i):
    minor = deepcopy(matrix)
    del minor[0]
    for b in range(len(matrix)-1):
        del minor[b][i]
    return minor

def det(matrix):
    determinant = 0
    if len(matrix) == 1:
        determinant = matrix[0][0]
    else:
        for x in range(len(matrix)):
            coFactor = det(findMinor(matrix,x))
            determinant += int(matrix[0][x]) * (-1)**(2+x) * coFactor
            return determinant

print det(myMatrix)

我遇到了无类型错误,我很确定这是因为我正在调用一个函数本身,因为它是一种递归方法。

有什么办法可以解决这个问题吗?甚至可能转储第二个功能?

你的问题是 det 只有 returns if.. else

else 部分

如果len(matrix)==1,没有任何反应(或者至少没有返回)。因此,当 n=2 它尝试使用 cofactor 时,它应该是 n=1 计算的结果,cofactor 的值是 None.

所以删除 return determinant 之前的缩进,这样它就在代码的 if.. else.. 部分之外。

即使解决了这个问题,您还会遇到其他问题。您最好将矩阵存储为大量浮点数而不是字符串。如果您想将其保留为字符串,请 determinant=int(matrix[0][0])

我认为解决字符串问题的最佳方法是:

for i in range(n):
    myMatrix.append(map(float,raw_input().split()))

不管怎样,如果您想真正进行矩阵计算,请不要使用您自己的数据结构。使用 numpy - 它比任何人用纯 python.

编写的速度都要快