Reaching optimal performance with numexpr
When handling complex expressions, NumPy stores intermediate results in 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')
The numexpr
package increases the performances in almost all cases, but to get a substantial advantage, you should use it with large arrays. An application that involves a large array is the calculation of a distance matrix. In a particle system...