Introduction
Although Python is not generally considered one of the fastest language (which is somewhat unfair), it is possible to achieve excellent performance with the appropriate methods. This is the objective of this chapter and the next. This chapter describes how to evaluate (profile) what makes a program slow, and how this information can be used to optimize the code and make it more efficient. The next chapter will deal with more advanced high-performance computing methods that should only be tackled when the methods described here are not sufficient.
The recipes of this chapter are organized into three parts:
Time and memory profiling: Evaluating the performance of your code
NumPy optimization: Using NumPy more efficiently, particularly with large arrays
Memory mapping with arrays: Implementing memory mapping techniques for out-of-core computations on huge arrays