[Numpy-discussion] Fast function application on list of 2D points?

Paulo J. S. Silva pjssilva@ime.usp...
Mon Jan 12 08:50:05 CST 2009


You question raised my attention due to a recent post of mine related to
the same kind of problem. I was solving it without using
apply_along_axis (due to ignorance).

However I tried to use apply_along_axis to solve my problem and it
proved to be very slow. Try the following:


import numpy as np
import time

def filter(x):
    return x.sum()

a = np.random.random((2, 1000000))

# Apply filter to all points, version 1
t = time.clock()
sums1 = np.apply_along_axis(filter, axis=0, arr=a)
print 'Elapsed time', time.clock() - t

# Apply filter to all points, version 2
t = time.clock()
sums2 = np.array([filter(p) for p in a.T])
print 'Elapsed time', time.clock() - t

print sums1 == sums2


In my computer the first version takes more than 6.5 longer than the
second. However the version 2 is using list comprehensions instead of a
numpy function. I would expected it to be slower. It looks like
apply_along_axis is creating many temporary arrays.

Eric, it looks like you should try something along the second version
above and see if it is faster in your case too.


More information about the Numpy-discussion mailing list