It is a common practice to use loops in programming. Now if you have a lot of big loops, you find python rather slow. A very efficient way is to use the so-called array broadcasting. For an introduction, see this page for example:
http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
The basic concept is to use column and row vectors to compute all intermediate values at the same time resulting in an 2d-array with all results.This way, you can get rid of almost all ordinary Python loops over arrays. The actual loops will be executed by highly optimized C routines instead, with only a small overhead for calling it from inside the Python interpreter. So this should be almost as fast as plain C or Fortran code.
Example: I would like to evaluate the Planck function for N test data sets, each of them cost four times evaluation of the function (for four wavelengths). In an elementary program, one can do it one by one for N times. This costs about 1.831 seconds runtime. Now if I use array broadcasting technique, I can do it within 0.013 seconds, or some 141 times faster !!! The main trick is shown in the following example:
ordinary loop: This loop should be called N times.
for i in arange(0,num):
param = fplk(frqs[i], temperature)
vectorized loop using array broadcasting: one single run, no loop at all.
frqs_row = frqs[numpy.newaxis]
temp = temperature[:, numpy.newaxis]
output = fplk(frqs_row, temp)
note that the fplk function is identical !