Using NumPy C-API# How to extend NumPy Writing an extension module Required subroutine Defining functions Functions without keyword arguments Functions with keyword arguments Reference counting Dealing with array objects Converting an arbitrary sequence object Creating a brand-new ndarray Getting at ndarray memory and accessing elements of the ndarray Example Using Python as glue Calling other compiled libraries from Python Hand-generated wrappers F2PY Cython Complex addition in Cython Image filter in Cython Conclusion ctypes Having a shared library Loading the shared library Converting arguments Calling the function ndpointer Complete example Conclusion Additional tools you may find useful SWIG SIP Boost Python Pyfort Writing your own ufunc Creating a new universal function Example non-ufunc extension Example NumPy ufunc for one dtype Example NumPy ufunc with multiple dtypes Example NumPy ufunc with multiple arguments/return values Example NumPy ufunc with structured array dtype arguments Beyond the basics Iterating over elements in the array Basic iteration Iterating over all but one axis Iterating over multiple arrays Broadcasting over multiple arrays User-defined data-types Adding the new data-type Registering a casting function Registering coercion rules Registering a ufunc loop Subtyping the ndarray in C Creating sub-types Specific features of ndarray sub-typing The __array_finalize__ method ndarray.__array_finalize__ The __array_priority__ attribute ndarray.__array_priority__ The __array_wrap__ method ndarray.__array_wrap__