On 3/1/07, Mark P. Miller <[EMAIL PROTECTED]> 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. ##imports import numpy as NP from numpy.random import randint #numpy array code array1 = NP.zeros((50,50), int) def random1(): c = array1(randint(10), randint(10)) t=timeit.Timer("random1()", "from __main__ import random1") >>> t.timeit(10000) 0.1085283185432786 >>> t.timeit(10000) 0.10784806448862128 >>> t.timeit(10000) 0.1095533091495895 #python 2d array based on nested lists array2 = [] for aa in xrange(50): array2.append([]) for bb in xrange(50): array2[aa].append([]) array2[aa][bb] = 0 def random2(): c = array2[randint(50)][randint(50)] >>> t=timeit.Timer("random2()", "from __main__ import random2") >>> t.timeit(10000) 0.076737965300061717 >>> t.timeit(10000) 0.072883564810638291 >>> t.timeit(10000) 0.07668181291194287
I'm going to guess that it is the indexing. Numpy tends to be slow when using explicit indexes and they should be avoided when possible. Vectorization also helps in this case. In [19]: def random1() : ....: c = array1[randint(10), randint(10)] ....: In [20]: def random2() : ....: i = randint(10, size=10000) ....: j = randint(10, size=10000) ....: c = array1[i,j] ....: In [21]: t=timeit.Timer("random1()", "from __main__ import random1") In [22]: t.timeit(10000) Out[22]: 0.032405853271484375 In [28]: t=timeit.Timer("random2()", "from __main__ import random2") In [29]: t.timeit(1) Out[29]: 0.0022358894348144531 Speeds things up about 15x. Chuck
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion