我正在用cython逐个元素地构建一个数组。我想在某些条目中存储常量np.inf(或-1*np.inf)。但是,这将需要返回Python以查找inf的开销。是否有与此常量等效的libc.math?或者其他一些可以轻松使用的值,相当于(-1*np.inf)并且可以在没有开销的情况下从Cython使用?EDIT例如,您有:cdefdoublevalue=0forkinxrange(...):#use-infhere--howtoavoidreferringtonp.infandcallingbacktopython?value=-1*np.inf 最佳答案
由于我发现内存View既方便又快速,因此我尽量避免在cython中创建NumPy数组并使用给定数组的View。但是,有时无法避免,不是更改现有数组而是创建一个新数组。在上层函数中这并不明显,但在通常被调用的子例程中却很明显。考虑以下功能#@cython.profile(False)@cython.boundscheck(False)@cython.wraparound(False)@cython.nonecheck(False)cdefdouble[:]vec_eq(double[:]v1,int[:]v2,intcond):'''Functionoutputcorrespondsto
我有一个代码片段,叫做“test.pyx”:importnumpyasnpcimportnumpyasnpprint(np.arange(10))然后我写了两个setup.py来编译它们。第一个工作正常:fromdistutils.coreimportsetupfromdistutils.extensionimportExtensionfromCython.Buildimportcythonizeimportnumpyasnpextensions=[Extension('test',['test.pyx'],include_dirs=[np.get_include()]),]setup
我在下面显示的代码有效,但我不确定原因。我正在使用:Mac操作系统10.8.5酿造Python2.7.5赛通0.20.2此代码主要取自thisvideotutorial和gitpage,但不幸的是,“开箱即用”对我不起作用。此包装的目标是通过Python提供对普通C函数的访问,该函数接受整数或整数结构并将它们相加。为此需要5个文件,如下所述:adder.c:两个加法器函数的C代码:add(标量输入)和pair_add(结构输入)adder.h:adder.c的头文件c_adder.pxd:一个cython头文件——本质上告诉cython要注意主头文件的哪些部分cy_adder.pyx:
我正在尝试使用gdb调试一些Cython代码,这些代码包装了要从Python调用的C++代码。我按照documentation中的说明进行操作但是我在调试时遇到了一些与我的代码无关的错误。示例:(gdb)cyprintsome_variablePythonException'PyDictObjectPtr'objecthasnoattribute'items':ErroroccurredinPython:'PyDictObjectPtr'objecthasnoattribute'items'我有时也会收到这个(通常在第一个之后):PythonExceptionThereisnome
我在大型数组上使用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)..
如何在Cython中并行迭代一个(Python)列表?考虑以下简单函数:defsumList():cdefintn=1000cdefintsum=0ls=[iforiinrange(n)]cdefPy_ssize_tiforiinprange(n,nogil=True):sum+=ls[i]returnsum这会产生很多编译器错误,因为没有GIL的并行部分显然不能与任何Python对象一起工作:ErrorcompilingCythonfile:------------------------------------------------------------...ls=[ifori
我有一个在常规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
我有以下一段代码,我想使用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
我无法将这个整数的内存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。编辑:这是我发现的其他一些事情。澄清一下