我有一个带有C库包装器的Cython包。这是包的树结构package/_api.pxd_wrap.pyxsetup.pywrapper/__init__.pywrap.py做pythonsetup.pybuild_ext--inplace将_wrap.so文件放在顶级package/目录中,这在大多数情况下通常是必需的。但是,我的wrap.py需要package/wrapper/目录中的_wrap.so。我想知道是否有一种方法可以让setup.py自行在所需位置创建.so文件,而无需手动将其复制并粘贴到该位置。 最佳答案 生成的.s
考虑以下Cython代码:cimportcythoncimportnumpyasnpimportnumpyasnp@cython.boundscheck(False)@cython.wraparound(False)deftest_memoryview(double[:]a,double[:]b):cdefintiforiinrange(a.shape[0]):a[i]+=b[i]@cython.boundscheck(False)@cython.wraparound(False)deftest_numpy(np.ndarray[double,ndim=1]a,np.ndarray[d
我找到了here和here可以使用Cython将Python转换为C,但我找不到任何分步示例。假设我有一个简单的功能:foo.pyxcdefvoidfoo(double*x):x[0]=0.0setup.pyfromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("foo.pyx"))然后我运行:pythonsetup.pybuild_ext--inplace来获取foo.c和foo.so文件(和构建目录)。好吧,我想在main.c中使用翻译后的(我希望)foo函数。
我想从python访问一个C函数,该函数返回一个包含double组的结构(其中这些数组的长度由结构的其他int成员给出)。声明是typedefstruct{intdim;intvertices;intquadrature_degree;intpolynomial_degree;intngi;intquadrature_familiy;double*weight;/*1D:ngi*/double*l;/*2D:ngi*dim*/double*n;/*2D:ngi*vertices*/double*dn;/*3D:ngi*vertices*dim*/}element;externvoidg
我想更快地进行cythonize。一个.pyx的代码是fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("MyFile.pyx"))如果我想cythonize怎么办几个扩展名为.pyx的文件,我将用它们的名字来调用文件夹中的所有.pyx文件在这两种情况下,setup.py的python代码是什么? 最佳答案 发件人:https://github.com/cython/cython/wiki/enhanceme
我编写了一个依赖于某些C扩展的Python模块。这些C扩展依次依赖于几个已编译的C库。我希望能够分发与所有依赖项捆绑在一起的此模块。我整理了一个最小示例(itcanbefoundonGitHubinitsentirety)。目录结构为:$tree..├──README.md├──poc│ ├──__init__.py│ ├──cython_extensions│ │ ├──__init__.py│ │ ├──cvRoberts_dns.c│ │ ├──cvRoberts_dns.h│ │ ├──helloworld.c│ │ ├──helloworld.pxd│
为了在cython中快速除法,我可以使用编译指令@cython.cdivision(True)这是可行的,因为生成的C代码没有零除检查。但是由于某种原因,它实际上使我的代码变慢了。这是一个例子:@cython.boundscheck(False)@cython.wraparound(False)@cython.nonecheck(False)@cython.cdivision(True)defexample1(double[:]xi,double[:]a,double[:]b,intD):cdefintkcdefdouble[:]x=np.zeros(D)forkinrange(D):
正在关注thisanswerto"CanIforceanumpyndarraytotakeownershipofitsmemory?"我尝试通过Cython的NumPy包装器使用PythonCAPI函数PyArray_ENABLEFLAGS,但发现它没有公开。以下尝试手动公开它(这只是重现失败的最小示例)fromlibc.stdlibcimportmallocimportnumpyasnpcimportnumpyasnpnp.import_array()ctypedefnp.int32_tDTYPE_tcdefexternfrom"numpy/ndarraytypes.h":voidP
我正在寻找一种方法来检查Cython代码中的NaN值。目前,我正在使用:ifvalue!=value:#valueisNaNelse:#valueisnotNaN有更好的方法吗?是否可以使用像Numpy的isnan这样的函数? 最佳答案 取自http://groups.google.com/group/cython-users/msg/1315dd0606389416,你可以这样做:cdefexternfrom"math.h":bintisnan(doublex)然后你可以只使用isnan(value)。在较新版本的Cython中,
我如何编写一个Cython函数,将字节字符串对象(普通字符串、字节数组或bufferprotocol之后的其他对象)作为typedmemoryview?根据UnicodeandPassingStringsCython教程页面,以下应该有效:cpdefobjectprintbuf(unsignedchar[:]buf):chars=[chr(x)forxinbuf]printrepr(''.join(chars))它确实适用于字节数组和其他可写缓冲区:$python-c'importtest;test.printbuf(bytearray("test\0ing"))''test\x00i