草庐IT

cythonized

全部标签

python - 在cython中编译时如何删除python断言?

所以,这是我的问题:我用python编写代码,但我需要提高代码中某些太慢的部分的性能。一个好的(和简单的)解决方案似乎是使用cython;我试了一下,取得了不错的效果。问题是我在python代码中使用了assert语句。在使用cython之前,我可以使用-OO选项编译我的python代码,这样我就可以交付一个不执行任何断言测试的版本,并且仍然有用于调试的断言。但是在cython中编译的文件似乎总是执行断言。是否有一些选项可以传递给cython编译以删除(或不删除)断言? 最佳答案 如果您定义C预处理器宏PYREX_WITHOUT_A

python - cython pyximport 在哪里编译?

我的cython/pyximport代码在读/写文件系统上运行良好。但是(出于测试目的),我需要在只读文件系统上进行尝试。如何更改cython/pyximport临时目录?(它在哪里完成工作?即即时编译?)如何将此“工作目录”设置为当前目录以外的其他位置,例如/tmp/(不是ro,而是rw)?回溯:!!File"/usr/lib/python2.7/site-packages/Cython/Distutils/build_ext.py",line301,incython_sourcesself.mkpath(os.path.dirname(target))!!File"/usr/lib

python - 如何控制 cython cdef 类的模块/名称?

我正在使用cython将C++库公开给python,方法是将所有包装器对象和函数放在内部模块_pydynd中,然后通过不同的python模块公开它们。我想控制出现在这些扩展类中的模块和类的名称,使其看起来像dynd.nd.array,例如,而不是_pydynd.w_array,这是包装类的内部名称。cython是否有执行此操作的机制?我希望找到类似于在编写定义时如何重命名C/C++函数的内容,但我的搜索结果一无所获。生成的C++代码应该不同,这里是tp_name行:staticPyTypeObject__pyx_type_7_pydynd_w_array={PyVarObject_HE

python - cython numpy 累积函数

我需要实现一个函数来对具有可变部分长度的数组的元素求和。所以,a=np.arange(10)section_lengths=np.array([3,2,4])out=accumulate(a,section_lengths)printoutarray([3.,7.,35.])我在这里尝试用cython实现:https://gist.github.com/2784725为了性能,我正在将section_lengths都相同的情况与纯numpy解决方案进行比较:LEN=10000b=np.ones(LEN,dtype=np.int)*2000a=np.arange(np.sum(b),dt

python - 使用 Cython 重载 Python 数学函数

这是我的基本问题:我有一个导入了的Python文件frommathimportsin,cos,sqrt我需要这个文件仍然是100%CPython兼容的,以允许我的开发人员编写100%CPython代码并使用为Python开发的优秀工具。现在进入Cython。在我的Python文件中,trig函数被调用了数百万次(代码的基础,无法更改)。有什么办法可以通过主python文件中的一些Python-fu,或者Cython魔法,否则我可以使用C/C++数学函数,使用Cython代码的一些变体cdefexternfrom"math.h":doublesin(double)那会给我接近C的性能,这

python - Cython 的功率谱

我正在尝试使用Cython优化我的代码。它正在做一个功率谱,而不是使用FFT,因为这是我们在类里面被告知要做的。我试过用Cython编写代码,但没有发现任何区别。这是我的代码#!/usr/bin/envpython#-*-coding:utf8-*-from__future__importdivisioncimportnumpyasnpimportnumpyasnpcimportcython@cython.boundscheck(False)defpower_spectrum(time,data,doublef_min,doublef_max,doubledf,w=1):cdefdou

python - Cython numpy 数组形状,元组赋值

我用的成语size_x,size_y,size_z=some_array.shape在处理numpy数组时很常见。当所讨论的数组具有类型时,同样的事情在Cython中似乎不起作用,例如defsomeFunc(np.ndarray[np.float32_t,ndim=2]arr):sx,sy=arr.shape我们最终遇到了这样的编译错误Cannotconvert'npy_intp*'toPythonobject这可能是因为“形状”被转换为C数组(为了更快的访问),所以它不再是一个元组。是否有可能在Cython中以某种方式提取这个元组?(或者我应该坚持使用sx,sy=arr.shape[

python - 在 Cython 中调用外部 c++ 模板函数

我在C++头文件中声明和实现了许多C++模板函数,我想访问Cython中的一些函数。假设header.hpp中的c++代码如下templateTdoublit(T&x){return2*x;}我需要在.pyx文件和setup.py文件中写入什么,以便我可以在Python中使用该函数作为>>>importmodname>>>printmodname.doublit(3)6PS:是否可以在PYPY中访问相同的功能?而且,如果是,如何?感谢您的帮助。但是,当我尝试按照您的方式进行操作时,我遇到了更多困难(如下)。doublit.htemplateTdoublit(T&x){return2*x

c++ - 如何在 Cython 中返回新的 C++ 对象?

我怀疑对此有一个简单的答案,但我需要一些帮助才能开始使用Cython。我有一个现有的C++代码库,我想通过Cython将其公开给Python。对于我想要公开的每个类,我创建了一个Cythoncppclass_ClassName和Python包装器类ClassName。一个最小的例子:Object.hCythonMinimal.pyxsetup.pyObject.h的内容:classObject{public:Objectclone(){Objecto;returno;}};CythonMinimal.pyx的内容:cdefexternfrom"Object.h":cdefcppclas

python - 如何在 Cython 和 Weave 中编写快速的 log-sum-exp?

我正在寻找从Python代码加速log-sum-exp(使用“最大技巧”)操作的选项。我在Windows8上使用Python2.7。我整理了使用Numpy、Scipy的实现、Numba、Cython、Weave和numexpr的实现比较,可以查看hereonnbviewer.我原以为我的Cython和Weave版本是所有版本中最快的,因为它们最接近native代码。但实际上,它们比我的其他版本慢。如何尽可能快地制作这些版本?编辑:wrt最初的笔记本,在所有方法中添加了max技巧,使比较不那么琐碎,更接近我的实际需要。 最佳答案 对于