我是 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
我运行的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)
and b.subs(x,xa)
(参见第一个文件 Myfunc.pyx)去掉 x 并用 xa 替换它,最终得到数字而非符号解决方案。2)我认为在第三个文件(calc.py)的顶部我不应该使用import Myfunc
但我没有得到的其他东西。我想我应该做什么:运行 setup.py 然后因为有 2 个新文件创建了 Myfunc.c 和 Myfunc.所以我只运行 calc.py 文件,据说我会在纯 python 中更快地获得我的数字. 必须做什么:我终于不知道...... 如果可能的话我想要什么: exp()
and a.subs(x,xa)
andb.subs(x,xa)
我认为正在减慢我的计算速度。我尝试将这段代码从纯 python 转换为“cython”(我认为转换不是描述这个的好词)。官方网站上的教程对我来说有点难以理解,所以我总是无法做到这一点。请原谅我的英语,因为我的气垫船里装满了鳗鱼