python - 查找作为列表列表输入的 N x N 矩阵的行列式 - "list index out of range"

标签 python python-3.x matrix determinants

我正在尝试编写一个程序来查找 Python 3.3 中 NxN 矩阵的行列式,但它返回“列表索引超出范围”错误。 det 函数中有一个调试打印语句,它表明在给出的 2 x 2 矩阵示例的情况下,它对于第一个小数工作正常,但随后 A 减少到 [[3]] 并且我看不到我的代码的哪一部分正在改变它?我希望 det 函数在 A 沿着第一行工作时保持 A 不变。

def minor(matrix,i):
    """Returns the Minor M_0i of matrix"""
    minor = matrix
    del minor[0] #Delete first row
    for b in list(range(len(matrix))): #Delete column i
        del minor[b][i]
    return minor

def det(A):
    """Recursive function to find determinant"""
    if len(A) == 1: #Base case on which recursion ends
        return A[0][0]
    else:
        determinant = 0
        for x in list(range(len(A))): #Iterates along first row finding cofactors
            print("A:", A)
            determinant += A[0][x] * (-1)**(2+x) * det(minor(A,x)) #Adds successive elements times their cofactors
            print("determinant:", determinant)
        return determinant

data = [[4, 3], [6, 3]]

print(det(data))

最佳答案

当您执行minor=matrix时,您并没有创建矩阵的副本,您只是创建了对它的新引用。当您下次从 minor 中删除一行时,您也会从 matrix 中删除该行。

copy.deepcopy可能会做你需要的事情。

关于python - 查找作为列表列表输入的 N x N 矩阵的行列式 - "list index out of range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542123/

相关文章:

python - 如何剥离 [] 中的所有内容

python - 为什么无论输入如何都会引发错误?

c - 使用管道将两个矩阵相乘

matlab - 使用不同间隔的 3d 矩阵的最小值/最大值 Matlab

python - 如何在 setup.py 中执行(安全的)bash shell 命令?

python - 如何从多类分类的混淆矩阵中提取 False Positive、False Negative

python - matplotlib 中 plt.draw() 和 plt.show() 的区别

python - 计算日期列表之间的平均天数

python-3.x - 如何通过在 Django 2.0 中创建语言文件来集成多语言支持?

r - 规范化 -1 和 1 之间的矩阵列