C API: array of floats/ints from python to C and back

Daniel Fetchinson fetchinson at googlemail.com
Sat Dec 27 17:27:53 EST 2008


>> I'm trying to write an extension module in C which contains a single
>> function with the following prototype:
>>     void func( int N, int * arg1, int * arg2, int * ret );
>> Here arg1 and arg2 are length N arrays, and the function computes ret
>> which is also an N length array. From python I'd like to call this
>> function as
>> ret = func( [ 1, 2, 3 ], [ 2, 3, 4] )
>
> This requirement pretty much dictates the slow answer you have.

I'm not sure I understand what you mean.

>  > Does this mean that I can only pass the arrays from python to C as
>  > generic python objects and in a later operation I need to get the
>  > elements from this generic python object, construct a C array and pass
>  > that to the C function? ... What's the simplest way of doing this?
>
> Either use ctypes, look into array.array, or look into numpy.array.

I have considered using ctypes but for my needs using the C API
directly seems more reasonable. array.array and numpy.array doesn't
fit my needs since I need to do long and complicated operations on the
two (pretty large) integer arrays that would be too slow using
array.array and numpy.array (I've verified this claim by benchmarking
a numpy.array based solution).

> I'd just use numpy, myself:
>      import numpy
>      total = numpy.array([1, 2, 3]) + numpy.array([2, 3, 4])

What makes you think I want to add two arrays?

Cheers,
Daniel


-- 
Psss, psss, put it down! - http://www.cafepress.com/putitdown



More information about the Python-list mailing list