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.
The purpose of the ArrayWrapper object, is to be garbage-collected by Python when the ndarray Python object disappear. The memory is then freed. Note that 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 3 clause |
The original blog post is no longer available, but I found it on the archive: http://web.archive.org/web/20160321001549/http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory/