基本上,我试图对Gauss Elimination(Foward)
方法进行编码,但是,当执行时,Python会在两个列表之间发生减法时引发异常说:"Object has no attribute '__getitem__'"
。
完整的堆栈跟踪是:
Traceback (most recent call last): File line 35, in <module> b=a.GaussForward() File line 29, in GaussForward self.a[index][w]=self.a[index][w]-aux[i][w] TypeError: 'float' object has no attribute 'getitem'
我将发布以下代码。
class TestGauss():
a=[]
def __init__(self,A):
self.a=A
def __getitem__(self,i):
return self.a[i]
def __setitem__(self,i,value):
self.a[i]=value
def GaussForward(self):
pivo=0.0
fact=0.0
aux=[]
for i in range(len(self.a)):
pivo=self.a[i][i]
for j in range(i+1,len(self.a[0])):
fact=self.a[j][i]/float(pivo)
print fact
for k in range(len(self.a[0])):
self.a[i][k]*=fact
for w in range(len(self.a[0])):
aux=self.a[i]
if i+1<len(self.a[0]):
index=i+1
self.a[index][w]=self.a[index][w]-aux[i][w]
print self.a
答案 0 :(得分:0)
你的问题在于aux[i][w]
。由于您设置了aux=self.a[i]
,aux
是一个平面列表(即不是列表列表),因此当您尝试访问aux[i][w]
时,您正在尝试索引{{ 1}}这是不正确的。我想你打算这样做:
self.a[i][i][w]