optimising single value functions for array calculations
Hello, I am developing a module which bases its calculations on another specialised module. My module uses numpy arrays a lot. The problem is that the other module I am building upon, does not work with (whole) arrays but with single values. Therefore, I am currently forces to loop over the array:
### a = numpy.arange(100) b = numpy.arange(100,200) for i in range(0,a.size): a[i] = myfunc(a[i])* b[i]
###
The results come out well. But the problem is that this way of calculation is very ineffiecent and takes time.
May anyone give me a hint on how I can improve my code without having to modify the package I am building upon. I do not want to change it a lot because I would always have to run behind the chnages in the other package.
To summarise: How to I make a calculation function arrayaware?
Thanks in advance, Timmie
Hello Timmie,
numpy.vectorize(myfunc) should do what you want.
Cheers,
Emmanuelle
Hello, I am developing a module which bases its calculations on another specialised module. My module uses numpy arrays a lot. The problem is that the other module I am building upon, does not work with (whole) arrays but with single values. Therefore, I am currently forces to loop over the array:
### a = numpy.arange(100) b = numpy.arange(100,200) for i in range(0,a.size): a[i] = myfunc(a[i])* b[i]
###
The results come out well. But the problem is that this way of calculation is very ineffiecent and takes time.
May anyone give me a hint on how I can improve my code without having to modify the package I am building upon. I do not want to change it a lot because I would always have to run behind the chnages in the other package.
To summarise: How to I make a calculation function arrayaware?
Thanks in advance, Timmie
Numpydiscussion mailing list Numpydiscussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpydiscussion
I does not solve the slowness problem. I think I read on the list about an experimental code for fast vectorization.
Nadav.
הודעה מקורית מאת: numpydiscussionbounces@scipy.org בשם Emmanuelle Gouillart נשלח: ב 01דצמבר08 12:28 אל: Discussion of Numerical Python נושא: Re: [Numpydiscussion] optimising single value functions for array calculations
Hello Timmie,
numpy.vectorize(myfunc) should do what you want.
Cheers,
Emmanuelle
Hello, I am developing a module which bases its calculations on another specialised module. My module uses numpy arrays a lot. The problem is that the other module I am building upon, does not work with (whole) arrays but with single values. Therefore, I am currently forces to loop over the array:
### a = numpy.arange(100) b = numpy.arange(100,200) for i in range(0,a.size): a[i] = myfunc(a[i])* b[i]
###
The results come out well. But the problem is that this way of calculation is very ineffiecent and takes time.
May anyone give me a hint on how I can improve my code without having to modify the package I am building upon. I do not want to change it a lot because I would always have to run behind the chnages in the other package.
To summarise: How to I make a calculation function arrayaware?
Thanks in advance, Timmie
Numpydiscussion mailing list Numpydiscussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpydiscussion
_______________________________________________ Numpydiscussion mailing list Numpydiscussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpydiscussion
2008/12/1 Nadav Horesh nadavh@visionsense.com:
I does not solve the slowness problem. I think I read on the list about an experimental code for fast vectorization.
The choices are basically weave, fast_vectorize (http://projects.scipy.org/scipy/scipy/ticket/727), ctypes, cython or f2py. Any I left out? Ilan's fast_vectorize should have been included in SciPy a while ago already. Volunteers for patch review?
Cheers Stéfan
Hi,
thanks for all your answers. I will certainly test it.
numpy.vectorize(myfunc) should do what you want.
Just to add a better example based on a recent discussion here on this list [1]:
myfunc(x): res = math.sin(x)
return res
a = numpy.arange(1,20)
=> myfunc(a) will not work. => myfunc need to have a possibility to pass single values to math.sin either through interation (see my inital email) or through other options.
(I know that numpy has a array aware sinus but wanted to use it as an example here.)
My orriginal problem evolves from here timeseries computing [2].
Well, I will test and report back further.
Thanks again and until soon, Timmie
[1]: http://thread.gmane.org/gmane.comp.python.numeric.general/26417/focus=26418 [2]: http://thread.gmane.org/gmane.comp.python.scientific.user/18253
2008/12/1 Timmie timmichelsen@gmxtopmail.de:
Hello, I am developing a module which bases its calculations on another specialised module. My module uses numpy arrays a lot. The problem is that the other module I am building upon, does not work with (whole) arrays but with single values. Therefore, I am currently forces to loop over the array:
### a = numpy.arange(100) b = numpy.arange(100,200) for i in range(0,a.size): a[i] = myfunc(a[i])* b[i]
###
Hi,
Safe from using numpy functions inside myfunc(), numpy has no way of optimizing your computation. vectorize() will help you to have a clean interface, but it will not enhance speed.
Matthieu
participants (5)

Emmanuelle Gouillart

Matthieu Brucher

Nadav Horesh

Stéfan van der Walt

Timmie