我是python的新手,並且努力讓cython加速我的一些計算。我儘可能地嘗試了我所能想到的,但似乎我還沒有理解某些東西,所以我對此感到悲傷。我有這些文件: 第一個叫Myfunc.pyx
:在cython中定義和使用數學函數
import math
from sympy import Symbol
x = Symbol('x')
wi=10
cdef float MyList(float a,float b):
return [(xa,ya,wi+a.subs(x,xa)*math.sin(xa)*b.subs(x,xa)*math.exp(1/ya**2)) for xa in range(1,5001,10) for ya in range(-2501,2501,10)]
的setup.py
:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules=[
Extension("Myfunc",
["Myfunc.pyx"],
libraries=["m"]) # Unix-like specific
]
setup(
name = "Demos",
cmdclass = {"build_ext": build_ext},
ext_modules = ext_modules
)
終於撥通calc.py
的Python腳本,我運行以獲取列表我想,所謂的 「MyList1」:
import Myfunc
from sympy import Symbol
import math
x = Symbol('x')
a1=(10*x)**(0.5)
b1=(20*x)**(0.5)
wi=10
MyList1=Myfunc.MyList(a1,b1)
print MyList1
現在一些澄清: 1)x,y是在先前的腳本中使用純粹作爲符號來推導公式。我使用a.subs(x,xa)
和b.subs(x,xa)
(請參閱第一個文件Myfunc.pyx)來刪除x並將其替換爲xa以最終得到數字而不是符號解決方案。 2)我認爲在第三個文件(calc.py)的頂部,我不應該使用import Myfunc
,但其他的東西我不明白。 我想我應該這樣做:運行setup.py,然後因爲有2個新文件創建了Myfunc.c和Myfunc.so我只是運行calc.py文件,據說我會讓我的數字更快tahn純python。 必須做什麼:我終於不知道... 我想如果可能的話:exp()
和a.subs(x,xa)
和b.subs(x,xa)
我認爲正在放慢我的計算。我嘗試將這段代碼從純python轉換爲「cython」(我認爲轉換不是一個好詞來描述這一點)。官方網站上的教程對我來說有點難以理解,所以我總是無法實現這一點。請原諒我的英語,因爲我的氣墊船充滿了鰻魚
正如你在Python新。檢查pylint或pep8來檢查你的代碼,並建議一些樣式變化,如pep8中所建立的。 – 2012-08-13 22:39:46