[Numpy-discussion] Faster way to generate a rotation matrix?
Robert Kern
robert.kern@gmail....
Tue Mar 3 22:57:23 CST 2009
On Tue, Mar 3, 2009 at 22:41, Jonathan Taylor
<jonathan.taylor@utoronto.ca> wrote:
> Thanks, All these things make sense and I should have known to
> calculate the sins and cosines up front. I managed a few more
> "tricks" and knocked off 40% of the computation time:
>
> def rotation(theta, R = np.zeros((3,3))):
> cx,cy,cz = np.cos(theta)
> sx,sy,sz = np.sin(theta)
> R.flat = (cx*cz - sx*cy*sz, cx*sz + sx*cy*cz, sx*sy,
> -sx*cz - cx*cy*sz, -sx*sz + cx*cy*cz,
> cx*sy, sy*sz, -sy*cz, cy)
> return R
>
> Pretty evil looking ;) but still wouldn't mind somehow getting it faster.
>
> Am I right in thinking that I wouldn't get much of a speedup by
> rewriting this in C as most of the time is spent in necessary python
> functions?
You would be able to get rid of the Python function call overhead of
rotation(), the ufunc machinery, and unnecessary array
creation/deletion. It could be worth your time experimenting with a
quick Cython implementation. That might help you (and the rest of us!)
answer this question instinctively the next time around.
--
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