我实现了Madhava–Leibniz系列在Python中计算pi,然后在Cython中提高速度。Python版本:from__future__importdivisionpi=0l=1x=TruewhileTrue:ifx:pi+=4/lelse:pi-=4/lx=notxl+=2printstr(pi)Cython版本:cdeffloatpi=0.0cdeffloatl=1.0cdefunsignedshortx=TruewhileTrue:ifx:pi+=4.0/lelse:pi-=4.0/lx=notxl+=2printstr(pi)当我停止Python版本时,它已将pi正确计
Cython为我们提供了一种导入C++标准库数据结构的简单方法,例如:fromlibcpp.vectorcimportvectorfromlibcpp.utilitycimportpair但是C++11引入的新容器呢:std::unordered_map、std::unordered_set等。它们是否以相同的方式受支持?我找不到合适的导入语句。 最佳答案 当前的cython版本允许它们。确保您的setup.py包含如下内容:ext_module=Extension("foo",["foo.pyx"],language="c++",
Numpy的字符串函数都非常慢,而且性能不如纯Python列表。我希望使用Cython优化所有普通字符串函数。例如,让我们采用一个包含100,000个数据类型为unicode或对象的unicode字符串的numpy数组,并将每个字符串小写。alist=['JsDated','УКРАЇНА']*50000arr_unicode=np.array(alist)arr_object=np.array(alist,dtype='object')%timeitnp.char.lower(arr_unicode)51.6ms±1.99msperloop(mean±std.dev.of7runs,
每当我将单个值分配给多维内存View的切片时,Cython似乎使用了错误的步幅,除非切片沿着第一维。我在下面给出一个完整的例子:#bug.pyimportnumpyasnpdefbug():#cdefint[:,::1]aa=2*np.ones((2,2),dtype=np.intc)a[:,:1]=1print(np.asarray(a))如果我们在Python中运行它(例如python3-c'importbug;bug.bug()'),我们得到[[12][12]]如预期的那样打印出来。我现在通过将文件重命名为bug.pyx用Cython编译它,将以下内容保存在同一目录的Makefi
为了获得一些学习经验,我尝试在Cython中将SDL(1.2.14)的一些部分包装在Python3.2的扩展中。我在弄清楚如何将C结构直接包装到Python中时遇到问题,以便能够像这样直接访问其属性:struct_name.attribute例如,我想采用结构SDL_Surface:typedefstructSDL_Rect{Uint32flagsSDL_PixelFormat*formatintw,hUint16pitchvoid*pixelsSDL_Rectclip_rectintrefcount}SDL_Rect;并且能够像在python中那样使用它:importSDL#init
我想将我的一个C++类作为Python模块提供。该类在headerFoo.h中声明,并在.cppFoo.cpp中实现。(g++-4.5,Ubuntux86_64)。这是一个非常非常简单的类:Foo.cpp:Foo::Foo():alfa(1.0),beta(1){}Foo::~Foo(){}Foo.h:classFoo{public:Foo()Foo(constFoo&orig);~Foo();doublealfa;intbeta;};我创建了一个setup.py,如Cython教程所示:setup.pyfromdistutils.coreimportsetupfromdistutil
我正在为C++库实现一个基于cython的接口(interface)。我实现了一个回调系统,它适用于普通函数,但在传入绑定(bind)方法时会奇怪地失败。这是我的cython代码的一部分:cdefexternfrom"VolumeHapticTool.h":cdefcppclassHDButtonEvent:boolisPressed()unsignedintgetButtonId()Vec3[float]getPosition()ctypedefvoid(*HDButtonCallback)(HDButtonEvent,void*)cdefexternfrom"Scene.h":cd
我目前正尝试在Cython中实现基本的矩阵向量乘法(作为muchlargerprojecttoreducecomputation的一部分)并发现我的代码比Numpy.dot慢大约2倍。我想知道是否有什么东西是我遗漏的导致速度变慢的。我正在编写优化的Cython代码,声明变量类型,需要连续数组,并避免缓存未命中。我什至尝试将Cython作为包装器并调用nativeC代码(见下文)。我想知道:我还能做些什么来加快我的实现速度,使这个基本操作的运行速度与NumPy一样快?我使用的Cython代码如下:importnumpyasnpcimportnumpyasnpcimportcythonDT
我正在尝试使用Cython的prange提高某些度量计算的性能。这是我的代码:defshausdorff(float64_t[:,::1]XAnotNone,float64_t[:,:,::1]XBnotNone):cdef:Py_ssize_tiPy_ssize_tn=XB.shape[2]float64_t[::1]hdist=np.zeros(n)#arrangementtofixcontiguityXB=np.asanyarray([np.ascontiguousarray(XB[:,:,i])foriinrange(n)])foriinrange(n):hdist[i]=_h
我正在尝试使用cython.pxd来扩充现有的python源代码,正如StefanBehnel在"UsingtheCythonCompilertowritefastPythoncode"的幻灯片32到35中所说明的那样.作为练习的一部分,我一直在使用元类中的__eq__()方法碰壁。我希望我可以选择一个更简单的案例来启动Cython,但我的生产代码并不那么简单。我编写了一个“最小的完整示例”来说明问题......请参阅问题底部的代码。短篇小说...如果我使用cdefinline__richcmp__(Japan_Car_ABCself,Japan_Car_ABCother,intop)