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))
答案 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)
答案 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)