[Numpy-discussion] Faster way to generate a rotation matrix?

Jonathan Taylor jonathan.taylor at utoronto.ca
Wed Mar 4 18:02:18 EST 2009


Just for other peoples reference I eventually went with a cython
version that goes about twice as fast as my old post.  Here it is:

import numpy as np
cimport numpy as np

cdef extern from "math.h":
    double cos(double)
    double sin(double)

def rotation(np.ndarray[double] theta):
    cdef np.ndarray[double, ndim=2] R = np.zeros((3,3))
    cdef double cx = cos(theta[0]), cy = cos(theta[1]), cz = cos(theta[2])
    cdef double sx = sin(theta[0]), sy = sin(theta[1]), sz = sin(theta[2])

    R[0,0] = cx*cz - sx*cy*sz
    R[0,1] = cx*sz + sx*cy*cz
    R[0,2] =  sx*sy

    R[1,0] = -sx*cz - cx*cy*sz
    R[1,1] = -sx*sz + cx*cy*cz
    R[1,2] = cx*sy

    R[2,0] = sy*sz
    R[2,1] = -sy*cz
    R[2,2] = cy

    return R

Best,
Jon.

On Wed, Mar 4, 2009 at 10:28 AM, Lou Pecora <lou_boog2000 at yahoo.com> wrote:
>
> Whoops.  I see you have profiled your code. Sorry to re-suggest that.
>
> But I agree with those who suggest a C speed up using ctypes or cthyon.
>
> However, thanks for posting your question.  It caused a LOT of very useful responses that I didn't know about.  Thanks to all who replied.
>
> -- Lou Pecora,   my views are my own.
>
>
>
>
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list