由于性能问题,我开始学习Cython.该特定代码试图在运输建模(用于计划)区域中实现一些新算法.
我决定从一个非常简单的功能开始,我将使用很多(数亿次)并且肯定会从性能提升中受益.
我以三种不同的方式实现了这个功能,并测试它们的相同参数(为简单起见),每个1000万次:
主脚本上的Python代码.运行时间:2.98秒
如您所见,cython代码比cython模块中的python代码慢45%,比主脚本上编写的代码慢64%.怎么可能?我哪里弄错了?
cython代码是这样的:
def BPR2(vol, cap, al, be):
con=al*pow(vol/cap,be)
return con
def func (float volume, float capacity,float alfa,float beta):
cdef float congest
congest=alfa*pow(volume/capacity,beta)
return congest
Run Code Online (Sandbox Code Playgroud)
测试脚本是这样的:
agora=clock()
for i in range(10000000):
q=linkdelay.BPR2(10,5,0.15,4)
agora=clock()-agora
print agora
agora=clock()
for i in range(10000000):
q=linkdelay.func(10,5,0.15,4)
agora=clock()-agora
print agora
agora=clock()
for i in range(10000000):
q=0.15*pow(10/5,4)
agora=clock()-agora
print agora
Run Code Online (Sandbox Code Playgroud)
我知道超越函数(幂)的问题比较慢,但我认为这应该是一个问题.
由于在函数空间中查找函数有开销,如果我为函数传递一个数组并返回一个数组,它会有助于性能吗?我可以使用Cython编写的函数返回数组吗?
供参考,我正在使用: - Windows 7 64位 - Python 2.7.3 64位 - Cython 0.16 64位 - Windows Visual Studio 2008
我正在尝试记录一个具有一些类级成员变量的 Python 类,但我无法使用 reST/Sphinx 对其进行适当记录。
代码是这样的:
class OSM:
"""Some blah and examples"""
url = 'http://overpass-api.de/api/interpreter' # URL of the Overpass API
sleep_time = 10 # pause between successive queries when assembling OSM dataset
Run Code Online (Sandbox Code Playgroud)
但我得到了这个输出(请参见绿色圆圈区域,我希望在其中有一些描述这两个变量的文本,如上所述)。

对于模糊之处,我深表歉意,但示例的一部分有些敏感
restructuredtext docstring python-sphinx autodoc sphinx-napoleon