草庐IT

cythonized

全部标签

python - 从 Cython 暴露一个类似文件的对象

我需要从我用Cython模块包装的C库中公开一个类似文件的对象。我想将python的通用io代码重用于缓冲、readline()等内容。新的IO模块似乎正是我所需要的,但实际上从Cython使用它似乎并不简单,我尝试了几种方法:我在从IO.RawIOBase继承的cdef类中的代码-这失败了,因为cdef类只能从其他cythoncdef类继承,而IO是“原始”C。我在一个cdef类中的代码,另一个(非cdef)类继承了我的cdef类和RawIOBase-失败并显示“TypeError:多个基础有实例布局冲突”我在继承自RawIOBase的(非cdef)类中的代码-这可行,但我失去了在类

python - Cython sum v/s 平均内存跳跃

我一直在尝试使用Cython,但遇到了以下特殊情况,其中数组上的求和函数所用时间是数组平均值所用时间的3倍。这是我的三个功能cpdefFLOAT_tcython_sum(cnp.ndarray[FLOAT_t,ndim=1]A):cdefdouble[:]x=Acdefdoublesum=0cdefunsignedintN=A.shape[0]foriinxrange(N):sum+=x[i]returnsumcpdefFLOAT_tcython_avg(cnp.ndarray[FLOAT_t,ndim=1]A):cdefdouble[:]x=Acdefdoublesum=0cdefu

python - 将 C++ 指针作为参数传递给 Cython 函数

cdefexternfrom"Foo.h":cdefcppclassBar:passcdefclassPyClass:cdefBar*bardef__cinit__(self,Bar*b)bar=b这总是会给我类似的东西:无法将Python对象参数转换为类型'Bar*'有没有办法做到这一点,或者我需要从Bar对象中提取所有内容,创建一个Python等效项,将其传入,然后在PyClass中重建它>? 最佳答案 我在尝试将带有结构的C代码包装为python类时遇到了这个问题。问题似乎是“特殊”函数,包括__init__和__cinit_

python - 指定 cython 输出文件

似乎默认情况下从distutils.core设置cmdclass为build_ext,编译当前工作目录中的cpp或c文件。有没有办法确定生成的c代码的写入位置?否则,存储库中会堆满生成的代码。例如这个文件setup.py会将文件example.c写入当前工作目录:fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("example.pyx")) 最佳答案 您可以将选项build_dir="directoryna

c++ - 如何用 Cython 包装 C++ 类?

我有一个C++类(class)。它由一个.ccp文件和一个.h文件组成。它可以编译(我可以编写一个在c++中成功使用它的主要方法)。如何使用Cython包装此类以使其在Python中可用?我已阅读文档但未遵循。他们谈论生成cpp文件。当我尝试关注文档时,我已经存在的cpp被吹走了......我打算在pyx文件中放入什么?我被告知类定义,但有多少?只是公共(public)方法?我需要一个.pxd文件吗?我不明白何时需要或不需要此文件。我已尝试在#pythonIRCchannel中提出这些问题,但无法得到答案。 最佳答案 Cython通

python - Cython 安装 GCC 错误

尝试在运行UbuntuServer的小型VPS上安装Cython。没有sudoapt-getinstallgcc然后pythonsetup.pyinstall在Cython目录中,但我得到了这个奇怪的错误。runninginstallrunningbuildrunningbuild_pyrunningbuild_extbuilding'Cython.Plex.Scanners'extensiongcc-pthread-fno-strict-aliasing-DNDEBUG-g-fwrapv-O2-Wall-Wstrict-prototypes-fPIC-I/usr/include/py

python - 在 Cython 中使用缓冲区 API

我正在使用一个C库,该库重复调用用户提供的函数指针以获取更多数据。我想编写一个Cython包装器,使得该回调的Python实现可以返回任何合理的数据类型,如str、bytearray、内存映射文件和依此类推(具体来说,支持Bufferinterface)。到目前为止我所拥有的是:fromcpython.buffercimportPyBUF_SIMPLEfromcpython.buffercimportPy_bufferfromcpython.buffercimportPyObject_GetBufferfromcpython.buffercimportPyBuffer_Releasef

python - 对象成员的 Cython 缓冲区声明

我想要一个带有NumPy成员的Cython“cdef”对象,并且能够使用快速缓冲区访问。理想情况下,我会这样做:importnumpyasnpcimportnumpyasnpcdefclassModel:cdefnp.ndarray[np.int_t,ndim=1]Adefsum(self):cdefinti,s=0,N=len(self.A)for0不幸的是,Cython无法编译这个,错误Buffertypesonlyallowedasfunctionlocalvariables.我使用的解决方法是在分配给对象成员的新局部变量上声明缓冲区属性:cdefclassModel:cdefn

c++ - 用于将 cython 中的许多 c++ 类包装到单个共享对象的项目结构

我在文档、邮件列表和thisquestionhere之间找到了部分答案。,但我想得到一个更直接的答案来解决我的具体问题......我正在学习cython,方法是尝试一点一点地包装我已经在使用的库的小部分,该库目前包装在boost::python中。我为这个boost包装器贡献了一点点,并将它用作c++引用,同时我正在使用ZeroMQPythonbindings作为cython引用。我的问题是关于项目结构的。这个库的当前boost版本编译为单个.so,这就是我的目标。我很快发现你不能直接将多个.pyx模块编译为单个.so。然后我开始在pxd文件中定义cppclass的路线,并在.pxi中

python - Python/Cython 中的快速 n 维稀疏数组

我有一个应用程序涉及非常稀疏的大型n维数组。scipy.sparse具有有用的“矢量化获取和设置”功能,因此可以使用Cython快速填充稀疏矩阵。当然scipy包不能处理n维。我发现有两个包在pythonsparray和ndsparse中执行n维稀疏数组。但是似乎两者都没有矢量化获取和设置功能。所以我需要:一个用于n维数组的python包,带有矢量化get和set或一个用于稀疏数组的c库,我可以使用Cython或轻松访问它一些“自己动手”选项,我猜这需要一个等效于pythondict的c出于我的目的,我认为将n维坐标映射回一维或二维可能会起作用。更好的是有一个dict等价物,我可以在C