2015-04-26 77 views
1

這是我的代碼:爲什麼我總是得到錯誤「list」對象沒有屬性'tranpose'?

class Matrix(object): 
    """List of lists, where the lists are the rows of the matrix""" 
    def __init__ (self, m=3,n=3,ma=[[1,2,3],[4,5,6], [7,8,9]]): 
     self.n_rows=m 
     self.n_cols=n 
     self.matrix=ma=list(ma)   

    def __repr__(self): 
     """String representation of a Matrix""" 
     output= "Matrix: \n{} \n Your matrix has \n {} columns \n {} rows"\ 
       .format(self.matrix, self.n_cols, self.n_rows) 
     return output 

    def transpose (self): 
     """Transpose the Matrix: Make rows into columns and columns into rows""" 
     ma_transpose=[] 
     for r in zip(*self.matrix): 
      ma_transpose.append(list(r)) 
     return ma_transpose 


    def matrixmult (self,other): 
     """Matrix Multiplication of 2 Matrices""" 
     m2=other.matrix 
     ma2_t=m2.transpose() 
     table=[] 
     for r in self.matrix: 
      row=[] 
      for n in ma2_t: 
       row.append(dot_mult(r,n)) 
       table.append(row) into a list of row 
       res=table 
     return res 

但每次我嘗試使用matrixmult功能的時候,我總是得到「的列表對象有沒有屬性matrixmult」。這是爲什麼?我之前在代碼中定義了它?

ma2_t=m2.transpose() 

AttributeError的: '名單' 對象沒有屬性 '轉'

有人請幫助?

+0

看看'res'。它是什麼類型? – user2357112

回答

1

最後一行matrixmult()正在返回list。它應該返回一個Matrix對象:

return Matrix(self.n_rows, other.n_cols, res) 

而且在transpose方法,你應該有:

return Matrix(self.n_cols, self.n_rows, ma_transpose) 
+0

啊,是的,謝謝^^它應該是更好的方式。但是你知道ma2_t = m2.transpose()部分的問題嗎? :我如何將列表更改爲可以使用轉置屬性的列表? – sapphirecloud

+0

您必須返回一個Matrix類的新實例,並且交換了'n_rows'和'n_cols',因爲您調換了矩陣並使用'ma_transpose'作爲數據。你現在正在做什麼,只返回'ma_transpose'列表。我編輯了我的答案。如果解決了您的問題,請接受答案。 – fferri

相關問題