[Numpy-discussion] when and where to use numpy arrays vs nested lists

Travis Oliphant oliphant@ee.byu....
Thu Mar 1 11:17:33 CST 2007


Mark P. Miller wrote:

>I've been using Numpy arrays for some work recently.  Just for fun, I 
>compared some "representative" code using Numpy arrays and an object 
>comprised of nested lists to represent my arrays.  To my surprise, the 
>array of nested lists outperformed Numpy in this particular application 
>(in my actual code by 10%, results below are more dramatic).
>
>Can anyone shed some insight here?  The functions that I use in reality 
>are much more complicated than those listed below, but they are 
>nonetheless representative of the type of thing that I'm doing.
>  
>

NumPy arrays are also not optimized generic containers like lists are.   
In order to support the fancy indexing operations, simple indexing is a 
bit slower for NumPy arrays.   You don't see the difference until you do 
nested loops like this.   NumPy arrays are not designed to be used 
inside of nested loops.

There are some tricks, however, you can apply in order to speed up usage 
of NumPy arrays inside of nested loops.

1) Use the a.item and a.itemset methods to get and set single elements 
in the array.
2) Use the optional arguments to ufuncs to by-pass two of the slowest 
portions of the ufunc
    set-up code that is usually not needed inside of a loop.


Also, selecting by an array of integers is not a particularly fast thing 
to do (it is in C, but it still has to loop over all the integers and 
pull out the results.  Using getitem twice ([]) as you are doing is 
going to be slower then using the cross-product and using getitem one 
time ([])

-Travis



More information about the Numpy-discussion mailing list