The numexpr package evaluates multiple-operator array expressions
many times faster than NumPy can. It accepts the expression as a
string, analyzes it, rewrites it more efficiently, and compiles it to
faster Python code on the fly. It's the next best thing to writing the
expression in C and compiling it with a specialized just-in-time (JIT)
compiler, i.e. it does not require a compiler at runtime.

Also, and since version 1.4, numexpr implements support for
multi-threading computations straight into its internal virtual
machine, written in C. This allows to bypass the GIL in Python, and
allows near-optimal parallel performance in your vector expressions,
most specially on CPU-bounded operations (memory-bounded were already
the strong point of Numexpr).
