Python 递归行列式

标签 python recursion

我创建了一个递归函数来根据余因子计算矩阵的行列式:

# determinant of a 2x2 matrix 
def det2(matrix):
    return matrix[0][0]*matrix[1][1]-matrix[1][0]*matrix[0][1]

# recursive part
def recursion(matrix,somme=None,prod=1):
    if(somme==None):
        somme=[]
    if(len(matrix)==1):
        somme.append(matrix[0][0])
    elif(len(matrix)==2):
        somme.append(det2(matrix)*prod)
    else:
        for index, elmt in enumerate(matrix[0]):
            transposee = [list(a) for a in zip(*matrix[1:])]
            transposee.remove(transposee[index])
            mineur = [list(a) for a in zip(*transposee)]
            somme = recursion(mineur,somme,prod*matrix[0][index]*(-1)**(index+2))
    return somme

def main(matrix):
    return sum(recursion(matrix))

没什么复杂的,只是我不明白为什么它不起作用。在某些情况下它确实给出了正确的答案,但不是全部。 我怀疑当矩阵中有 0 时结果是错误的,但我不确定。

如果你有什么想法,

谢谢

最佳答案

我认为您的问题可能在这里:

transposee.remove(transposee[index])

remove 删除第一次列表传递给它的值。您的测试矩阵有多个重复值,因此删除的值可能不是您想要删除以创建 mineur 数组的值。

您的算法适用于随机数组,因为在这种情况下不太可能发生此类重复。

要使您的程序正常运行,请将该行替换为

del transposee[index]

这将专门删除 index 处的值。

关于Python 递归行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092715/

相关文章:

python - 如何选择txt文件中的某个字符串并将其列出在csv文件中?

c++ - 我的递归函数中的堆栈溢出,是由于逻辑还是大数导致的?

c - 如何修复未打印树中节点的错误

python - Neo4j 无法连接到图形数据库服务器

javascript - 如何使用递归函数进行迭代(javascript)

algorithm - 什么是尾递归?

java - 如何通过回溯和递归来解决数独?

python - 在列 block 中展平或分组数组 - NumPy/Python

Python 字典 : there a speed difference between matching a numeric key over a word in python?

python - 狮身人面像 : Remove package and module name for specific function