Guido van Rossum: patterns for fast Python
plus.google.com
plus.google.com
1. Write algorithms using numpy, attempting to not use too many crazy indexing/array tricks. You can generally avoid costly for loops using broadcasting.
2. Profile code using cProfile and Robert Kern's line_profiler
3. Judiciously optimize by re-writing computationally intensive methods in Cython. Numba also looks like a contender in this arena as well, but I haven't done a benchmarked comparison.