Получение ошибки нетипичного типа при попытке найти определитель матрицы 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.

Другие вопросы по тегам