[Numpy-discussion] Faster way to generate a rotation matrix?
Tue Mar 3 19:14:11 CST 2009
In addition to what Robert said, you also only need to calculate six
cx = cos(tx)
sx = sin(tx)
cy = cos(ty)
sy = sin(ty)
cz = cos(tz)
sz = sin(tz)
you, are making sixteen transcendental calls in your loop each time.
I can also recommend Chapter 2 of Introduction to Robotics: Mechanics and
Controls by John J. Craig for more on more efficient transformations.
On Tue, Mar 3, 2009 at 7:19 PM, Robert Kern <email@example.com> wrote:
> On Tue, Mar 3, 2009 at 17:53, Jonathan Taylor
> <firstname.lastname@example.org> 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,
> > 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.
> 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
> Numpy-discussion mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Numpy-discussion