# [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.