The goal of this example is to show how an existing C codebase for numerical computing (here c_code.c) can be wrapped in Cython to be exposed in Python.
The meat of the example is that the data is allocated in C, but exposed in Python without a copy using the PyArray_SimpleNewFromData numpy function in the Cython file cython_wrapper.pyx.
Note that the ownership of the memory is then handed off to the Python VM, and there is no control of when Python will deallocate the memory. If the memory is still being used by the C code, please refer to the following blog post by Travis Oliphant:
http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory
You will need Cython, numpy, and a C compiler.
To build the C extension in-place run:
$ python setup.py build_ext --i
To test the C-Python bindings, run the test.py file.
Files | |
---|---|
c_code.c | The C code to bind. Knows nothing about Python |
cython_wrapper.c | The Cython code implementing the binding |
setup.py | The configure/make/install script |
test.py | Python code using the C extension |
Author: | Gael Varoquaux |
---|---|
License: | BSD |