Quaternions in Python

Johann Hibschman johann at physics.berkeley.edu
Sat Oct 6 16:05:19 EDT 2001


>>>>> "Erik" == Erik Max Francis <max at alcyone.com> writes:

    Erik> That's perfectly valid, but I don't think it's what the
    Erik> poster I responded to meant.  He meant encoding the
    Erik> transform represented by the quarternion into a matrix. 

But Pauli spin matrices are matrices!  But I get the point that you're
thinking of real matrices.  It doesn't mean that NumPy doesn't make
this easy.  You could do something like:

import Numeric

class Quat:
    def __init__(self, matrix):
        self.matrix = matrix
    
    # Extracting components (Is this right?)
    def c0(self):
        m = self.matrix
        return (m[0][0]+m[1][1])/2.0
    def c1(self):
        m = self.matrix
        return (m[0][1]+m[1][0])/2.0
    def c2(self):
        m = self.matrix
        return 1.0j*(m[0][1]-m[1][0])/2.0
    def c3(self):
        m = self.matrix
        return (m[0][0]-m[1][1])/2.0
    
    # Math
    def __mul__(self, other):
        if hasattr(other, 'matrix'):
            return Quat(Numeric.matrixmultiply(self.matrix, other.matrix))
        else:
            return Quat(self.matrix * other)
    def __rmul__(self, other):
        return Quat(other * self.matrix)
    def __add__(self, other):
        if hasattr(other, 'matrix'):
            return Quat(self.matrix + other.matrix)
        else:
            return Quat(self.matrix + other)
    def __radd__(self, other):
        return Quat(other + self.matrix)
    def __sub__(self, other):
        if hasattr(other, 'matrix'):
            return Quat(self.matrix - other.matrix)
        else:
            return Quat(self.matrix - other)
    def __rsub__(self, other):
        return Quat(other - self.matrix)

# Basis
s0 = Quat(Numeric.array([[1.0, 0.0], [0.0, 1.0]]))
s1 = Quat(Numeric.array([[0.0, 1.0], [1.0, 0.0]]))
s2 = Quat(Numeric.array([[0.0, -1.0j], [1.0j, 0.0]]))
s3 = Quat(Numeric.array([[1.0, 0.0], [0.0, -1.0]]))

# Create from components.
def q(i, j, k, l):
    "Create a quaternion from components."
    return s0*i+s1*j+s2*k+s3*l




More information about the Python-list mailing list