[SciPy-user] Calling C code (Newbie Question)

Tom Kornack tom at kornack.com
Mon Sep 27 23:58:33 EDT 2004


Hello:

I am attempting to perform a Lomb Periodogram (using the Scargle 
method) on a rather large data set. It's a way of getting a power 
spectrum for non-uniformly sampled data. I have the program written in 
C and it works well. I have converted the program to pure Python and 
it's too slow. It's still slow when I convert the for loops into 
various Numeric constructs.

So I'm looking for a way to call a C program from python and pass big 
Numeric arrays or a similar format to and from it. (without, hopefully, 
copying them in memory). I tried weave, but I noticed that you can't 
weave in whole programs. I suppose you can't weave in anything with a 
def statement, right? I would deeply appreciate any guidance. I feel as 
though this must be a very common program for scientists and I did try 
to find explicit examples of embedded C code, but to no avail.

If you want to read on, see below.

Thank you very much.
Tom Kornack

-=-

If you would like to see just what kind of computation is being done, 
the C and python codes can be found here:

http://listera.org/pub/lomb/

The main loops look like this, where om and time are arrays:

     for i in range(numf):
        s2[i] = sum( sin(2.*om[i]*time) )
        c2[i] = sum( cos(2.*om[i]*time) )

and I tried to speed things up by doing:

     s2 = sum( sin(2. * outerproduct(om,time) ), 1)
     c2 = sum( cos(2. * outerproduct(om,time) ), 1)

but found that was too memory intensive and still slow. So that's why I 
wanted to do something purely in C.

http://kornack.com
Fundamental Symmetries Lab, Princeton University
609-716-7259 (h), 609-933-2186 (m), 609-258-0702 (w), 609-258-1625 (f)
Thomas Kornack, 157 North Post Road, Princeton Junction, NJ 08550-5009




More information about the SciPy-User mailing list