2014-04-27 1 views
2

Numpy 배열의 dtype으로 사용할 간단한 데이터 형식을 만들고 요소 추가, 뺄셈 및 비교를 수행 할 수 있습니다. 유형은 true, false 및 "do not care"(DC)를 나타내는 (적어도) 세 개의 값을 가져야합니다. 후자는 진실과 거짓 모두 동일하고, 덧셈과 뺄셈 제로처럼 동작 :"do not care"값을 가진 Python - 숫자 클래스

>>> MyDtype(True) == MyDtype(DC) == MyDtype(True) # note reflection 
True 
>>> MyDtype(False) == MyDtype(DC) == MyDtype(False) # ditto 
True 
>>> MyDtype(True) == MyDtype(False) 
False 
>>> MyDtype(True) - MyDtype(DC) == MyDtype(True) 
True 
>>> MyDtype(DC) + MyDtype(False) == MyDtype(False) 
True 

는 내가 완전히 제정신 방식으로 이러한 의미를 얻는 방법에 난처한 상황에 빠진입니다.

+2

는 의미가 제정신하지 않기 때문에 이러한 의미를 얻을 수있는 더 온건 한 방법은 없습니다. M (True) == M (DC)'M (DC) == M (False)'그러나 M (True)! = M (False)'은 평이해야한다.). 당신은 이것을 무엇에 사용하고 싶습니까? [아마도 더 좋은 방법이있을 것입니다] (http://meta.stackexchange.com/q/66377). – delnan

+1

동등성에 대한 귀하의 요점은 잘 받아 들여지고 있습니다 : 아마도 동등 연산자를 전혀 사용해서는 안되며 아마도 인스턴스 메소드가 더 좋을 것입니다. 내가하려고하는 일 (궁극적으로)에 대해서는 [이 논문] (http://18.7.29.232/handle/1721.1/6673)을 구현하고있다. –

+1

어쩌면 당신은 [3 값 논리] (http://en.wikipedia.org/wiki/Three-valued_logic)를 찾고 있습니까? – Dunno

답변

1

마법 함수를 사용하여 클래스의 객체에 대한 산술 연산을 제어 할 수 있습니다. 왼쪽의 객체가 각각의 비 반사 된 동작을 구현하지 않으면 반사 된 동작조차도 제어 할 수 있습니다. 저도 같은 문제가 있었 쓴 적이 http://www.rafekettler.com/magicmethods.html#numeric

:

마법 방법의 포괄적 인 문서는 여기에서 찾을 수 있습니다

(링크는 반사 연산에 대한 섹션 뒤에 산술 연산자 섹션을 참조) 그 객체가 dontcare 기호 인 클래스. 가치를 감싸지 않기 때문에 당신이 요구했던 것과 정확히 일치하지는 않지만, 당신의 요구에 쉽게 적응할 수 있어야합니다. 여기 그것을 얻을 수 있습니다 https://github.com/keepitfree/nicerpython

from symbols import dontcare 

True == dontcare == True 
>>> True 
False == dontcare == False 
>>> True 
True == False 
>>> False 
True - dontcare == True 
>>> True 
dontcare + False == False 
>>> True 
+0

이 질문에 이론적으로 대답 할 수 있지만 여기에 대답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (// meta.stackoverflow.com/q/8259). – SuperBiasedMan