2013-03-27 113 views
0

在這段代碼中我想找到矩陣的加法。 A+B我怎樣才能把兩個矩陣作爲輸入

[[x + y for x,y in zip(w,v)] for w,v in zip(A,B)] 

當我運行該程序並在Python殼A+B寫答案出來作爲[[7,4],[5,0],[4,4],[2,2], [-3,3],[-2,4]

答案實際上應該是[[9,6],[2,3],[2,8]]

什麼我需要在程序中集成這樣的Python函數調用def addition (A,B)需要兩個矩陣作爲輸入和作爲結果返回並添加兩個輸入。

+0

......它已經這樣做了。爲了清楚起見,只需將頂部的A和B的定義移到函數定義之下,並調用'addition(A,B)'。 – Dougal 2013-03-27 21:56:04

+0

當您在解釋器中編寫「A + B」時,您只需將列表連接起來。做@Dougal所說的並稱之爲你的功能。如果你想重寫內置的'+',你正在尋找操作符重載,哪個dspyz提到(我猜你不是,那將是奇怪的作業)。 – keyser 2013-03-27 21:58:06

+0

如何調用我的功能? – Jett 2013-03-27 21:59:31

回答

3

或者,如果你不害怕嵌套列表理解的,你可以,如果你想重載運營商+您的矩陣具有一個班輪

C = [[x + y for x,y in zip(w,v)] for w,v in zip(A,B)] 
+0

嗯,這實際上是家庭作業,所以我受限於這樣做。 – Jett 2013-03-27 21:54:24

+0

在這種情況下,你的答案似乎很好。我試着運行你的代碼並得到了正確的結果。你在找運營商超載嗎? – dspyz 2013-03-27 21:56:56

0

做到這一點,你必須包裝的2維列入一個類和def方法__add__。例如(我用你的加法功能):

>>> class Matrix(object): 
    @staticmethod 
    def addition (A, B): 
     d=[] 
     n=0 
     while n < len(B): 
      c = [] 
      k = 0 
      while k < len (A[0]): 
       c.append(A[n][k]+B[n][k]) 
       k=k+1 
      n+=1 
      d.append(c) 
     return d 
    def __init__(self,lst): 
     self.lst=lst 
    def __add__(self, other): 
     return Matrix(Matrix.addition(self.lst, other.lst)) 
    def __repr__(self): 
     return str(self.lst) 


>>> A=Matrix([[7,4], [5,0], [4,4]]) 
>>> B=Matrix([[2,2], [-3,3], [-2, 4]]) 
>>> A+B 
[[9, 6], [2, 3], [2, 8]]