Eric,

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.

Paulo

_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to