编辑:我通过编辑有问题的行来绕过问题:
if ( type(x) == int or ( type(x)==list and type(x[0]) == int ) ) and not ( type(y) == int or (type(y)==list and type(y[0]) == int) ):
因此,在我的部分代码中,我试图将矩阵,整数或列表浮点表示的组合相乘(例如[5,9] = 5/9)。但是我得到了上面提到的错误。
我的逻辑是btw,如果X(或Y)不是矩阵,这意味着它是一个整数,或者它是[a,b]类的列表,这意味着它的第一个元素也是一个整数,在矩阵中,它是[[a,b],[c,d]],这意味着X的第一个元素也是一个列表。
以下是代码:
def matmult(X,Y):
#X integer Y matrix
if ( type(X) == int or type(X[0]) == int ) and not ( type(Y) == int or type(Y[0]) == int ):
for i in range(len(Y)):
for j in range(len(Y[i])):
Y[i][j] = multit(Y[i][j],X)
return Y
#Y integer X matrix
elif ( type(y) == int or type(Y[0]) == int ) and not (type(X) == int or type(X[0]) == int) :
for i in range(len(X)):
for j in range(len(X[i])):
X[i][j] = multit(X[i][j],Y)
return X
#both integer
elif ( type(X) == int or type(X[0]) == int ) and ( type(y) == int or type(Y[0]) == int ):
return multit(X,Y)
#both matrix
else:
#defining the result matrix
result = [ [ [] for bim in xrange(len(Y)) ] for bom in xrange( len(X[0]) ) ]
for i in range(len(result)):
for j in range(len(result[0])):
result[i][j] = 0
#multiplating it
for i in range(len(X)):
for j in range(len(Y[0])):
for k in range(len(Y)):
result[i][j] = sumit( result[i][j], multit(X[i][k],Y[k][j]) )
return result
我收到该行的错误:
if ( type(X) == int or type(X[0]) == int ) and not ( type(Y) == int or type(Y[0]) == int )
:
但是我也会将其用于其他案件。 我对这个问题的看法是,当X可能不是一个列表时,我可能会调用X [0],但是如果是这样的话我很难并且X是整数python不会检查另一个案例,因为它会停在“类型” (X)== int“。
这就是我怎么称为matmul,我应该以btw的前缀方式获取矩阵运算。
if lst[0]=="+":
return reduce(matsum,lst[1:])
elif lst[0]=="-":
return matsub(lst[1],lst[2])
elif lst[0]=="*":
return reduce(matmult,lst[1:])
完整追溯:
Traceback (most recent call last):
File "mateval.py", line 161, in <module>
print mateval(["+",["*",["-",1,[1,3]],[[2,[-1,2]],[[7,3],525]],[[7,3],[1,5],-9,23]]]],[[2,3,-1],[[1,2],[1,3],-1]]])
File "mateval.py", line 150, in mateval
lst[i] = mateval(lst[i])
File "mateval.py", line 157, in mateval
return reduce(matmult,lst[1:])
File "mateval.py", line 108, in matmult
if ( type(x) == int or type(x[0]) == int ) and not ( type(y[0]) == int ):
TypeError: 'NoneType' object has no attribute '__getitem__'
答案 0 :(得分:0)
您发布的代码与回溯中显示的代码不同。但是,我怀疑matmul
以某种方式返回None
,这会导致异常。也许,你忘记了return
陈述吗?
请注意,multit
可能是罪魁祸首。