私はpythonが初めてで、cythonで計算の一部を高速化するのに苦労しています。考えられるあらゆる方法を試しましたが、まだ何かを理解していないようで、惨めに失敗しました。私はこれらのファイルを持っていますMyfunc.pyx
:
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
最後に、 「MyList1」と呼ばれる、必要なリストを取得するために実行するpython スクリプトを呼び出します。
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)
and (最初のファイル Myfunc.pyx を参照)を使用しb.subs(x,xa)
て x を取り除き、それを xa に置き換えて、最終的に記号解ではなく数値解を得ます。2) 3 番目のファイル (calc.py) の一番上にあるのは使用すべきではないと思いますimport Myfunc
が、それ以外のものは取得できません。私がすべきだと思うこと: setup.py を実行すると、Myfunc.c と Myfunc.so という 2 つの新しいファイルが作成されたので、calc.py ファイルを実行するだけで、純粋な python で数値が速くなるはずです. 何をしなければならないか:ついにわからない... できれば欲しいもの: exp()
anda.subs(x,xa)
とb.subs(x,xa)
計算が遅くなると思います。このコードを純粋な python から「cython」に変換しようとしました (変換はこれを説明するのに適した言葉ではないと思います)。公式サイトのチュートリアルは私には少し難しいので、いつもこれを達成できません。私のホバークラフトはウナギでいっぱいなので、私の英語を許してください