[Tutor] improving speed using and recalling C functions
Gabriele Brambilla
gb.gabrielebrambilla at gmail.com
Thu Apr 10 19:29:58 CEST 2014
Hi,
2014-04-10 13:05 GMT-04:00 Martin A. Brown <martin at linux-ip.net>:
>
> Hi there Gabriele,
>
> : I have a program that is reading near 600000 elements from a
> : file. For each element it performs 200 times a particular
> : mathematical operation (a numerical interpolation of a function).
> : Now these process takes near 8 hours.
>
> Sounds fun! Here are some thoughts (though I may not have any solid
> answers, I hope these pointers are useful):
>
> Are you sure (from profiling) that the numerical interpolation
> is the bottleneck?
>
> I see that the time needed by the code increase when I increase the number
of these operation. It's the only thing I do in the code.
(I'm sorry but I don't know very well what profiling is)
> What is the numerical operation?
> 1: Is the function implemented in Numpy? [0]
> 2: How about SciPy? [1]
>
> Is interp1d from scipy.interpolate.
I think is the best one
> Is there a domain-specific Python library that already does the
> computation you want to achieve? If so, then you have "only" the
> format question--how to put your data into the format required by
> the library. If not, then on to the next question you ask ...
>
> No, interp1d do exactly what I want.
> : Creating a C function and calling it from the code could improve
> : the speed? It could be useful that it contains both the
> : mathematical operation and the for loop or only the mathematical
> : operation?
> :
> : If it is a reasonable solution to try decreasing the
> : computational time how can I implement this C function?
>
> It is certainly an option! In the event that you cannot find
> something that is fast enough in Python already and you cannot find
> any C library that has Python bindings, then, whether you have to
> write your own, or you have a third party C library, you have
> several options for writing bindings.
> You can write your Python bindings using:
>
> * ctypes: https://docs.python.org/2/library/ctypes.html
> * cffi: http://cffi.readthedocs.org/en/release-0.8/
> * cython: http://www.cython.org/
> * roll your own C!
>
> Do you know if does a C library exist with an already implemented function
like interp1d?
I use Anaconda, is there an already implemented mode to do it in Anaconda?
Cython?
> It might be beyond the scope of this list (certainly beyond my
> capabilities) to provide recommendations on which avenue to
> take--but if you are asking, you may already have the tools you need
> to assess for yourself. There is, however, quite a bit of
> experience loitering around this list, so perhaps somebody else will
> have a suggestion.
>
> -Martin
>
> [0] http://www.numpy.org/
> [1] http://www.scipy.org/
>
> --
> Martin A. Brown
> http://linux-ip.net/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140410/2a5d1aaa/attachment.html>
More information about the Tutor
mailing list