运行的Cython的3种方法
運行條件:python2.7
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一種:
fib.pyx
def fib(long n):'''Returns the nth Fibonacci number.'''cdef long a=0, b=1, ifor i in range(n):a, b = a + b, areturn a
test.py
import sys reload(sys) sys.setdefaultencoding('utf8') import pyximport; pyximport.install()import fib print fib.fib(15)運行方法:
python test.py
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二種fib.pyx
def fib(long n):'''Returns the nth Fibonacci number.'''cdef long a=0, b=1, ifor i in range(n):a, b = a + b, areturn asetup.py #!/usr/bin/python #-*-coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf8') from distutils.core import setup from Cython.Build import cythonize #cythonize:編譯源代碼為C或C++,返回一個distutils Extension對象列表 setup(ext_modules=cythonize('fib.pyx'))
test.py from fib import fib print fib(9)
運行方法:
python setup.py build_ext --inplace
python test.py
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第3種
c1.pyx
import mathdef great_circle(float lon1,float lat1,float lon2,float lat2):cdef float radius = 3956.0cdef float pi = 3.14159265cdef float x = pi/180.0cdef float a,b,theta,ca = (90.0-lat1)*(x)b = (90.0-lat2)*(x)theta = (lon2-lon1)*(x)c = math.acos((math.cos(a)*math.cos(b)) + (math.sin(a)*math.sin(b)*math.cos(theta)))return radius*ctest.py
#!/usr/bin/env python #encoding: utf-8 import sys #引用sys模塊進來,并不是進行sys的第一次加載 reload(sys) #重新加載sys sys.setdefaultencoding('utf8') ##調用setdefaultencoding函數 import timeit from c1 import great_circle num=10#表示運行多少次 # t = timeit.Timer("c1.great_circle(%f,%f,%f,%f)" % (lon1,lat1,lon2,lat2),"import c1") t = timeit.Timer("c1.great_circle(%f,%f,%f,%f)" % (16,124,76,173),"import c1") print "Cython function (still using python math)", t.timeit(num), "sec"運行方法:
cython c1.pyx
gcc -c -fPIC -I/usr/include/python2.7/ c1.c
gcc -shared c1.o -o c1.so
python test.py
總結
以上是生活随笔為你收集整理的运行的Cython的3种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu64位(x86)下科大讯飞s
- 下一篇: cython编码报错