草庐IT

cythonized

全部标签

python - 使用 cython 对 python 中的小数组进行高效的数学操作

我在大型数组上使用numexpr进行快速数学运算,但如果数组的大小小于CPU缓存,使用简单的数组数学在Cython中编写我的代码会更快,尤其是在函数被多次调用的情况下。问题是,您如何在Cython中使用数组,或者更明确地说:在Cython中是否有与Python的array.array类型的直接接口(interface)?我想做的是这样的事情(简单的例子)cpdefarray[double]running_sum(array[double]arr):cdefinticdefintn=len(arr)cdefarray[double]out=new_array_zeros(1.0,n)..

python - 与 Cython 并行迭代列表

如何在Cython中并行迭代一个(Python)列表?考虑以下简单函数:defsumList():cdefintn=1000cdefintsum=0ls=[iforiinrange(n)]cdefPy_ssize_tiforiinprange(n,nogil=True):sum+=ls[i]returnsum这会产生很多编译器错误,因为没有GIL的并行部分显然不能与任何Python对象一起工作:ErrorcompilingCythonfile:------------------------------------------------------------...ls=[ifori

python - 如何将 python 数组转换为 cython 数组?

我有一个在常规Python中创建的浮点值数组,我想将其传递给底层C函数前端的cython函数。C函数要求将数组作为float指针传递,如下所示:voidsetOverlays(constfloat*verts);cython包装器看起来像这样:defset_overlays(verts):setOverlays(verts)如何将verts制作成cython数组?我认为这可能有效:cdeffloat*cVerts=[vforvinverts]但不幸的是,生成的值是一个Python对象,在这种情况下自动转换不起作用。ctypes中的等效表达式(有效)是:cVerts=(c_float*l

python - 使用 Cython 优化 numpy.dot

我有以下一段代码,我想使用Cython对其进行优化:sim=numpy.dot(v1,v2)/(sqrt(numpy.dot(v1,v1))*sqrt(numpy.dot(v2,v2)))dist=1-simreturndist我已经编写并编译了.pyx文件,当我运行代码时,我没有看到任何显着的性能改进。根据Cython文档,我必须添加c_types。Cython生成的HTML文件表明瓶颈是点积(当然这是意料之中的)。这是否意味着我必须为点积定义一个C函数?如果是,我该怎么做?编辑:经过一些研究,我想出了以下代码。改进只是微不足道的。我不确定我是否可以做些什么来改进它:from__fu

python - Cython:缓冲区类型不匹配,预期为 'int' 但得到了 'long'

我无法将这个整数的内存View传递给这个(相当微不足道的)函数。Python给我这个错误:ValueError:Bufferdtypemismatch,expected'int'butgot'long'有人可以帮助我了解发生了什么吗?查了一下stackoverflow,好像跟python是怎么解释类型的,C是怎么解释类型的。%%cythondefmyfunction(int[:]y):pass#Pythoncodeimportnumpyasnpy=np.array([0,0,1,1])myfunction(y)这会产生上面的ValueError。编辑:这是我发现的其他一些事情。澄清一下

python - Cython/Python/C++ - 继承 : Passing Derived Class as Argument to Function expecting base class

我正在使用Cython包装一组C++类,允许它们使用Python接口(interface)。示例代码如下:基类.h:#ifndef__BaseClass__#define__BaseClass__#include#include#includeusingnamespacestd;classBaseClass{public:BaseClass(){};virtual~BaseClass(){};virtualvoidSetName(stringname){printf("inbasesetname\n");}virtualfloatEvaluate(floattime){printf("

python - 如何在 Cython 中使用 const

我已阅读此链接:https://github.com/cython/cython/wiki/FAQ#id35我的Cython0.20.1应该能够支持const。但是我的以下代码无法编译:cdefconstdoublea=2.5print(a)在编译过程中它说test.pyx:5:5:Assignmenttoconst'a'Traceback(mostrecentcalllast):File"setup1.py",line11,inext_modules=cythonize(extensions)File"X:\WinPython3\python-3.3.5.amd64\lib\site

python - 如何在 Cython 的 setup.py 中指定 Python 3 源?

我正在按照本教程尝试在Cython中编写“HelloWorld”程序http://docs.cython.org/src/tutorial/cython_tutorial.html#cython-hello-world我创建了helloworld.pyxprint("HelloWorld")和setup.py:fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("helloworld.pyx"))如何更改setup.py以指定我的源是Python3,而不是教程中的

python - 使用 Cython 构建未知长度的一维数组/列表/vector 的最有效方法?或者永远不应该这样做?

我有一个用Cython编写的时间关键型模型。我的Cython扩展的主要功能有一个循环,根据Cython分析器(它以黄色阴影显示Python调用的数量),目前唯一的“黄色”部分是我附加到Python列表的地方。(我必须输出一个Python对象,因为我在Python脚本中调用我的Cython函数)。这是我的函数的基本思想(其余的都是多余的,我已经测试了这个函数的每个部分,追加操作是瓶颈):fromlibc.mathcimportlogdefmain(someargs):cdef(somevars)cdeflistOutputList=[]#NB:allvarshavedeclaredtyp

python - Cython 与 numpy 性能缩放

我一直在研究Cython,为其他工作做准备。我尝试了一个简单的测试用例,发现我的代码在处理较大问题时的执行方式有些奇怪。我创建了一个简单的min/max函数来计算2Dfloat32数组的最小值和最大值,并将其与运行numpy.min(a),numpy.max(a)进行比较。对于10000个元素的数组,性能是相似的。对于1000000个元素的数组,cython的表现要差得多。这是我的cython代码:importnumpycimportcythoncimportnumpyDTYPE=numpy.float32ctypedefnumpy.float32_tDTYPE_t@cython.bo