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