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

Robert Kern robert.kern@gmail....
Tue Mar 3 18:19:10 CST 2009


On Tue, Mar 3, 2009 at 17:53, Jonathan Taylor
<jonathan.taylor@utoronto.ca> wrote:
> Sorry.. obviously having some copy and paste trouble here.  The
> message should be as follows:
>
> Hi,
>
> I am doing optimization on a vector of rotation angles tx,ty and tz
> using scipy.optimize.fmin.  Unfortunately the function that I am
> optimizing needs the rotation matrix corresponding to this vector so
> it is getting constructed once for each iteration with new values.
> >From profiling I can see that the function I am using to construct
> this rotation matrix is a bottleneck.  I am currently using:
>
> def rotation(theta):
>   tx,ty,tz = theta
>
>   Rx = np.array([[1,0,0], [0, cos(tx), -sin(tx)], [0, sin(tx), cos(tx)]])
>   Ry = np.array([[cos(ty), 0, -sin(ty)], [0, 1, 0], [sin(ty), 0, cos(ty)]])
>   Rz = np.array([[cos(tz), -sin(tz), 0], [sin(tz), cos(tz), 0], [0,0,1]])
>
>   return np.dot(Rx, np.dot(Ry, Rz))
>
> Is there a faster way to do this?  Perhaps I can do this faster with a
> small cython module, but this might be overkill?

You could look up to the full form of the rotation matrix in terms of
the angles, or use sympy to do the same. The latter might be more
convenient given that the reference you find might be using a
different convention for the angles. James Diebel's "Representing
Attitude: Euler Angles, Unit Quaternions, and Rotation Vectors" is a
nice, comprehensive reference for such formulae.

http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=5F5145BE25D61F87478B25AD1493C8F4?doi=10.1.1.110.5134&rep=rep1&type=pdf&ei=QcetSefqF4GEsQPnx4jSBA&sig2=HjJILSBPFgJTfuifbvKrxw&usg=AFQjCNFbABIxusr-NEbgrinhtR6buvjaYA

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco


More information about the Numpy-discussion mailing list