草庐IT

python - 如何在 Cython 中为多线程 C++ 类发布 GIL?

我有一个C++类,其中包含一些使用std::thread的方法,我正在通过Cython使Python可以访问这些方法。你知道我想在我的Cython代码中的什么地方放置nogill指令吗?当我声明类方法或创建Cython包装器类时,我是否想放置它?我使用了以下Cython文档中的示例类:声明类:cdefexternfrom"Rectangle.h"namespace"shapes":cdefcppclassRectangle:Rectangle()except+Rectangle(int,int,int,int)except+intx0,y0,x1,y1intgetArea()voidg

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

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

python - 递归方程的高效python方法

我正在尝试优化一段代码中的循环。我认为以更NumPy的方式编写它会使它更快,但现在更慢了!方程将长度为n的numpy.arrayvec作为输入:fromnumpyimport*deff(vec):n=len(vec)aux=0foriinrange(n):aux=aux+(1-aux)*vec[i]returnauxdeff2(vec):n=len(vec)G=tril(array([-vec]*n),-1)+1#numpyway!aux=dot(G.prod(1),vec)returnauxif__name__=='__main__':importtimeitprint(timeit

python - cpdef 和封装在 def 中的 cdef 有什么区别?

在Cython文档中有一个example他们给出了两种编写C/Python混合方法的方法。一个显式的,带有用于快速C访问的cdef和用于从Python访问的包装器def:cdefclassRectangle:cdefintx0,y0cdefintx1,y1def__init__(self,intx0,inty0,intx1,inty1):self.x0=x0;self.y0=y0;self.x1=x1;self.y1=y1cdefint_area(self):cdefintareaarea=(self.x1-self.x0)*(self.y1-self.y0)ifarea还有一个使用c

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[