2013-03-27 2 views
0

이 코드에서 행렬의 추가를 찾는 것으로 가정합니다. 나는이 프로그램을 실행하고 파이썬 쉘 A+B에 쓸 때 A+B어떻게 두 개의 행렬을 입력으로 취할 수 있습니까?

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

이 대답은, [[7, 4], [5로 나온다 0], [4, 4], [2, 2], [-3, 3], [-2, 4]]

대답은 실제로해야 파이썬 함수가 def addition (A,B) 입력으로 두 행렬을한다라고하고, 그래서 나는이 프로그램에 통합해야 할 무엇 [[9,6],[2,3],[2,8]]

결과로 두 입력의 추가와 함께 반환합니다.

+0

... 이미 그렇게합니다. 상단의 'A'와 'B'의 정의를 명확하게하기 위해 함수 정의 아래로 이동하고'addition (A, B) '를 호출하면됩니다. – Dougal

+0

인터프리터에'A + B'라고 쓰면리스트를 연결하기 만하면됩니다. @ 두갈이 말한 것과 당신의 기능을 부르십시오. 당신이 내장 된'+'를 오버라이드하고 싶다면 operator overloading을 찾고 있는데, 어떤 dspyz가 언급했는지 (나는 당신이 아닌 것 같아요. 이상한 숙제 일 것입니다). – keyser

+0

함수를 어떻게 호출합니까? – Jett

답변

3

아니면 중첩 된 지능형리스트 두려워하지 않으면 당신은 당신의 행렬에 대한 운영자 +를 오버로드하려는 경우, 당신은 당신은 2 차원을 포장해야 한 라이너

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

글쎄, 이건 숙제 일 뿐이므로 그렇게 할 수 밖에 없다. – Jett

+0

그 경우 귀하의 대답은 괜찮아 보입니다. 나는 당신의 코드를 실행하고 올바른 결과를 얻었다. 연산자 오버로딩을 찾으십니까? – dspyz

0

하여이 작업을 수행 할 수 있습니다 목록에 클래스로 넣고 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]] 
관련 문제