Получение ошибки нетипичного типа при попытке найти определитель матрицы N*N
Я пытаюсь сделать программу, чтобы найти определитель матрицы 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)
Я получаю ошибку No-Type, и я почти уверен, что это потому, что я вызываю функцию внутри себя, так как это рекурсивный подход.
Есть ли способ это исправить? Возможно даже сбросить вторую функцию?
1 ответ
Ваша проблема в том, что det
только возвращает что-то в else
часть if.. 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.