2014-03-28 3 views
0

저는 quaternion lib 인 qmath를 사용하려고합니다.qmath 매우 이상합니다. AttributeError

from qmath import qmathcore 
a = qmathcore.quaternion([1,2,3,4]) 
print a.conj() 

이 작동해야한다는 것을 나에게

Traceback (most recent call last): 
    File "*******/q_test.py", line 25, in <module> 
    print str(a.conj()) 
    File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 788, in conj 
    return self.real() - self.imag() 
    File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 762, in imag 
    return self - self.real()  
    File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 522, in __sub__ 
    self -= other 
    File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 407, in __isub__ 
    self.other = quaternion(other) 
    File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 81, in __init__ 
    self.q = q.q 
AttributeError: quaternion instance has no attribute 'q' 

그러나 그들은 말했다 문서에서 같은 역 추적

을 제공 :이 무엇

def conj(self): 
    """ 
    Returns the conjugate of the quaternion 
    >>> import qmathcore 
    >>> a = qmathcore.quaternion([1,2,3,4]) 
    >>> a.conj() 
    (1.0-2.0i-3.0j-4.0k) 
    >>> a = qmathcore.hurwitz([1,2,3,4]) 
    >>> a.conj() 
    (1-2i-3j-4k) 
    """ 
    return self.real() - self.imag() 

입니까?

+0

사람들은 좋은 quaternion python lib를 알고 있습니까? 나는'qmath' (질문 참조),'Quaternion' (정규화되지 않은 Q에서는 작동하지 않음),'euclid'를 사용했지만, Qs와 벡터를 곱할 수는 없지만'quaternionarray'는 심지어 수입. 이거 슬프네. – akaRem

+0

이'qmath.quaternion (np.float64 (1))'도 같은 오류를 발생시킵니다. 'qmath.quaternion (np.float (1))'은 잘 동작합니다. 나는'qmath '가 쓰여진 지 2 년 만에'numpy'의 변화를 의심합니다. – hpaulj

답변

0

qmathcore.py은 최신 (1.9) numpy로 자체 doctest를 처리하지 못합니다.

quatereon()

elif isinstance(q,float) or isinstance(q,int): # accept np.float64 
     self.q = 1.0 * np.array([q,0.,0.,0.]) 

이 테스트를 추가하면 qmath.quaternion([1,2,3,4]).imag() (및 conj)를 할 수 있습니다.

quaternion 메서드는 많은 type(q)==xxx 테스트를 사용하고 있습니다. isinstance()은보다 견고한 테스트입니다. 또한 else:pass으로 끝나며 따라서 처리 할 수없는 q 값을 포착하지 않습니다.

일부 가져 오기 오류를 수정 한 후 qmathcore doctest가 정상적으로 실행됩니다.

+0

이게 답이라고 확신하지는 않지만 받아들입니다. 내 프로젝트에서 Ive는 쿼터니언 대수학의 자체 버전을 구현했습니다. 하지만 아직도 .. 당신의 대답에 대해 많은 감사드립니다! – akaRem

+0

나는'qmath'를 좀 더 살펴 봤습니다. 그 수학은 괜찮은 것처럼 보입니다. 그러나 파이썬 클래스의 처리, 특히'quaternion'의 서브 클래 싱은 매우 어렵습니다. 강조점은 추후 계산에 유용한 무언가를 만들기보다는 다양한 입력 형식을 처리하는 것 같습니다. – hpaulj