尝试查找 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.
编写的速度都要快
我正在尝试编写一个程序来查找 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.
编写的速度都要快