2015-01-24 3 views
1

먼저, scipy에 복소수에 대한 데이터 구조가 있다는 것을 알고 있습니다. 저는 전산 물리학 교과서를 단지 따르고 ​​있습니다. 그리고 이것은 하나의 질문입니다.파이썬에서 복소수에 대한 클래스를 생성하는 방법은 무엇입니까?

class complex: 
    def __init__(self,x,y): 
     self.re=x 
     self.im=y 
    def __add__(self, other): 
     return complex(self.re+other.re, self.im+other.im) 
    def __sub__(self, other): 
     return complex(self.re-other.re, self.im-other.im)   
    def __mul__(self, other): 
     return complex(self.re*other.re - self.im*other.im, 
     self.re*other.im + self.im*other.re)   
    def __repr__(self): 
     return '(%f , %f)' %(self.re, self.im) 

을하지만 어떻게 내가이 생성 한 클래스 부문, 복소수, 계수 및 위상을 구현해야합니다 : 는 지금까지 내가있어 무엇인가?

감사

+0

복소수로 이러한 연산을 수행하는 방법을 수학적으로 알고 있습니까? 그렇다면 파이썬으로 구현할 때 어디서 붙어 있습니까? 귀하의 질문에 이러한 작업을 수행하는 방법을 경우 스택 오버플로에 대해 주제 밖입니다. – CoryKramer

+0

나는 복소수에 대한 작업에 문제가 없다. 파이썬으로 구현하는 방법을 모르겠습니다. – Physicist

+1

이미 기본 산술 특수 메서드를 찾았습니다. 나눗셈과 모듈러스 연산자를 연결하는 법을 알고 싶다는 뜻입니까? 귀하가 여기서 정확히 고심하고있는 것이 무엇인지는 명확하지 않습니다. –

답변

1

부문 당신은 __abs____div__ 및 계수로 구현해야합니다. 복잡한 접합과 단계에서는 고유 한 메소드 이름을 선택해야합니다. 예를 들어,

def conj(self): 
    return complex(self.re, - self.im) 

(z.conj()). 클래스에 새로운 파이썬 구문을 정의 할 수 없으므로, 예를 들어 z*을 사용할 수 없습니다. 원한다면 오른쪽 곱셈을 __rmul__으로 정의하고 __pow__을 정의해야합니다. 단항 마이너스, __neg__을 잊지 마십시오. 그러나 다른 이중 밑줄 연산자 메서드가 모두 복소수로 구현하는 것이 합리적이지는 않습니다. a list in the docs이 있습니다.

+1

'__div__'및 '__abs__'에 대한 귀하의 초기 제안에 동의하지 않습니다. 나는 분할을 위해'__truediv__'을 제안 할 것이고 (당신이'/'나눗셈 연산자를 지원하기를 원한다면'__floordiv__' 또한), 모듈러스를 위해서'__mod__'를 제안 할 것입니다. '__truediv__'는 파이썬 3에서 디비전을 구현하는 데 필요하며, 파이썬 2에서도 좋은 아이디어입니다 ('from __future__ import division'에서 사용하십시오). complex conjugate의 경우 정수에 대해 비트 반전을 반환하는 단항'~'연산자를 재사용하는 것이 좋습니다. 그것은'__inverse__' 메소드를 정의함으로써 커스텀 클래스에서 구현 될 수 있습니다. – Blckknght

+0

완전성을 위해'__truediv__'에 동의합니다. 그러나'__mod__'는 모듈로 산술을위한'%'중위를 구현합니다 :이 부분과 바닥 부분은 복소수에 대해서는 아무런 의미가 없습니다. 그러나,'''을 복합 공액으로 재사용하면 효과가있다. – xnx

관련 문제