为什么我的Python代码不能用于查找决定因素?

时间:2013-11-25 05:44:29

标签: python matrix determinants

Python 3中的以下代码旨在返回任何订单矩阵的行列式。它接收一个文本文件,格式为:

  

3 6 8 9
  9 -7 5 -7
  2 0 8 0
  8 9 -1 -1

我没有得到任何错误,但它给出了错误的答案。有什么线索的原因?谢谢!

def determinant(inputFileName):  
    def cofactorExp(listOfRows):  
        if len(listOfRows) <= 2:  
            return (float(listOfRows[0][0]) * float(listOfRows[1][1])) - (float(listOfRows[0][1]) * float(listOfRows[1][0]))  
        else:  
            for i in range(len(listOfRows)):  
                tempList = listOfRows[:]  
                del tempList[i]  
                for x in range(len(tempList)):  
                    tempList[x] = tempList[x][1:]  
                det = ((-1) ** i) * float(listOfRows[i][0]) * cofactorExp(tempList)  
                return det  
    rows = []  
    for line in open(inputFileName):  
    rows append(line split(" "))  
    for item in rows:  
        if "\n" in item[len(item) - 1]:  
            item[len(item) - 1] = item[len(item) - 1][:-1]  
    return(cofactorExp(rows))  

2 个答案:

答案 0 :(得分:0)

一些事情

您的打开文件命令无法正确处理数据前后的空格

rows = []
for line in open(inputFileName):  
   rows.append(line.split(" "))  
for item in rows:  
   if "\n" in item[len(item) - 1]:  
        item[len(item) - 1] = item[len(item) - 1][:-1]

当我在我的组成矩阵上运行代码时,命令返回

[['3', '6', '8', '9'], ['9', '-7', '5', '-7'], ['2', '0', '8', '0'], ['8', '9', '-1', '-1', '']]

请注意矩阵中有一个空元素。不要忘记在对象中调用命令时添加句点

我建议使用csv模块http://docs.python.org/2/library/csv.html

的示例
return det

似乎提前退出函数,因为det在循环范围内

最后,有一种更简单的方法来解决和编码决定因素

   (aei+bfg+cdh)-(ceg+bdi+afh) 

http://en.wikipedia.org/wiki/Determinant

答案 1 :(得分:0)

from numpy import *
x=input("give order of square matrix")
a=[]
for i in range(x):
    a.append([])
    for j in range(x):
        y=raw_input("input a["+str(i)+"]["+ str(j)+ "] element")
        a[i].append(y)
b=array(a)


print b

def rem(cc):
    s=cc.shape
    y=[]
    for i in range(s[0]):
        y.append([])
        for j in range(s[0]):
            if i==0:
                continue
            elif j==x:
                continue
            else:
                y[i].append(cc[i][j])
    y.pop(0)          
    return array(y)

def det(bb):
    n=0
    s=bb.shape  
    if s==(1,1):
        return bb[0][0]
    else:
        for j in range(s[0]):
            x=j
            global x  
            p=int(bb[0][j])
            pp=int(det(rem(bb)))        
            k=p*pp
            n=n+((-1)**(j))*int(k)
    return n

print "value is ",det(b)