When handling complex expressions, NumPy stores intermediate results in the memory. David M. Cooke wrote a package called
numexpr which optimizes and compiles array expressions on-the-fly. It works by optimizing the usage of the CPU cache and by taking advantage of multiple processors.
Its usage is generally straightforward and is based on a single function—
numexpr.evaluate. The function takes a string containing an array expression as its first argument. The syntax is basically identical to that of NumPy. For example, we can calculate a simple
a + b * c expression in the following way:
a = np.random.rand(10000) b = np.random.rand(10000) c = np.random.rand(10000) d = ne.evaluate('a + b * c')