- Introduction to Python
- Getting started with Python and the IPython notebook
- Functions are first class objects
- Data science is OSEMN
- Working with text
- Preprocessing text data
- Working with structured data
- Using SQLite3
- Using HDF5
- Using numpy
- Using Pandas
- Computational problems in statistics
- Computer numbers and mathematics
- Algorithmic complexity
- Linear Algebra and Linear Systems
- Linear Algebra and Matrix Decompositions
- Change of Basis
- Optimization and Non-linear Methods
- Practical Optimizatio Routines
- Finding roots
- Optimization Primer
- Using scipy.optimize
- Gradient deescent
- Newton’s method and variants
- Constrained optimization
- Curve fitting
- Finding paraemeters for ODE models
- Optimization of graph node placement
- Optimization of standard statistical models
- Fitting ODEs with the Levenberg–Marquardt algorithm
- 1D example
- 2D example
- Algorithms for Optimization and Root Finding for Multivariate Problems
- Expectation Maximizatio (EM) Algorithm
- Monte Carlo Methods
- Resampling methods
- Resampling
- Simulations
- Setting the random seed
- Sampling with and without replacement
- Calculation of Cook’s distance
- Permutation resampling
- Design of simulation experiments
- Example: Simulations to estimate power
- Check with R
- Estimating the CDF
- Estimating the PDF
- Kernel density estimation
- Multivariate kerndel density estimation
- Markov Chain Monte Carlo (MCMC)
- Using PyMC2
- Using PyMC3
- Using PyStan
- C Crash Course
- Code Optimization
- Using C code in Python
- Using functions from various compiled languages in Python
- Julia and Python
- Converting Python Code to C for speed
- Optimization bake-off
- Writing Parallel Code
- Massively parallel programming with GPUs
- Writing CUDA in C
- Distributed computing for Big Data
- Hadoop MapReduce on AWS EMR with mrjob
- Spark on a local mahcine using 4 nodes
- Modules and Packaging
- Tour of the Jupyter (IPython3) notebook
- Polyglot programming
- What you should know and learn more about
- Wrapping R libraries with Rpy
Wrapping a function from a C library for use in Python
Cython ships with a set of standard .pxd files that provide these declarations in a readily usable way that is adapted to their use in Cython. The main packages are cpython
, libc
and libcpp
. The NumPy library also has a standard .pxd file numpy
, as it is often used in Cython code. See Cython’s Cython/Includes/ source package for a complete list of provided .pxd files. (From http://docs.cython.org/src/tutorial/clibraries.html ).
Additional .pxd are also avaialbel for:
However, here is an example of how to write functions from an external C library if you have to do it yourself. The example is taken from https://github.com/cythonbook/examples and wraps the Mersenne Twister from http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html for use in Python.
if not os.path.exists('mt19937ar.h'): ! wget http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.sep.tgz ! tar -xzvf mt19937ar.sep.tgz
--2015-03-26 16:02:41-- http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.sep.tgz Resolving www.math.sci.hiroshima-u.ac.jp... 133.41.16.48 Connecting to www.math.sci.hiroshima-u.ac.jp|133.41.16.48|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 15433 (15K) [application/x-gzip] Saving to: ‘mt19937ar.sep.tgz’ 100%[======================================>] 15,433 37.3KB/s in 0.4s 2015-03-26 16:02:42 (37.3 KB/s) - ‘mt19937ar.sep.tgz’ saved [15433/15433] x mt19937ar.c x mt19937ar.h x mt19937ar.out x mtTest.c x readme-mt.txt
%%file mt.pxd cdef extern from "mt19937ar.h": void init_genrand(unsigned long s) double genrand_real1()
Writing mt.pxd
%%file mt_random.pyx cimport mt def init_state(unsigned long s): mt.init_genrand(s) def rand(): return mt.genrand_real1()
Writing mt_random.pyx
%%file setup.py from distutils.core import setup, Extension from Cython.Build import cythonize ext = Extension("mt_random", sources=["mt_random.pyx", "mt19937ar.c"]) setup(name="mersenne_random", ext_modules = cythonize([ext]))
Overwriting setup.py
! python setup.py build_ext -i &> /dev/null
import mt_random mt_random.init_state(123) for i in range(10): print mt_random.rand(), print
0.696469187433 0.712955321584 0.28613933881 0.428470925062 0.226851454989 0.690884851546 0.55131476525 0.71915030892 0.719468970718 0.491118932723
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论