我有一个函数foo,它将指向内存的指针作为参数,并写入和读取该内存:cdefvoidfoo(double*data):data[some_index_int]=some_value_doubledo_something_dependent_on(data)我像这样分配给data:cdefintN=some_intcdefdouble*data=malloc(N*sizeof(double))cdefintiforiincython.parallel.prange(N,nogil=True):foo(data)readout(data)我现在的问题是:不同的线程如何处理这个问题?我的猜测
我有一个.pyx文件,我在其中定义了一些函数,例如cdefdoublefoo(doublea)nogil:return3.*a我如何在pyx文件之外对此类函数的行为进行单元测试?由于它们是cdef,我无法简单地导入它们... 最佳答案 要测试cdef功能,您需要在Cython中编写测试。可以尝试使用cpdef函数,但并非所有签名都可以在这种情况下使用(例如使用指针的签名,如int*、float*等等)。要访问cdef函数,您需要通过pxd文件“导出”它们(对于cdef-functionsofextensiontypes也可以这样做)
我写了一个小的cython代码是#t3.pyxfromlibc.stdlibcimportatoicdefintfun(char*s):returnatoi(s)setup.py文件是fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(ext_modules=cythonize("t3.pyx"))我使用此命令运行setup.pypythonsetup.pybuild_ext--inplace这给了我Compilingt3.pyxbecauseitchanged.Cythonizingt3.pyxrunni
我目前正在尝试优化我的Python程序并开始使用Cython以减少函数调用开销,并且可能稍后包括优化的C库函数。所以我遇到了第一个问题:我在我的代码中使用组合来创建一个更大的类。到目前为止,我已经将我的一个Python类转换为Cython(这已经够难了)。这是代码:importnumpyasnpcimportnumpyasnpctypedefnp.float64_tdtype_tctypedefnp.complex128_tcplxtype_tctypedefPy_ssize_tindex_tcdefclassbendingForcesClass(object):cdefdtype_t
在Windows下,似乎easy_install具有C依赖性并不是很容易。尝试1-vcvarsall.bat错误我正在Windows7下安装cython,使用MinGw;我修改了Windows7的PATH以包含C:\MinGw\bin。此时,我尝试easy_install-Ucython,得到...C:\Users\mike_pennington\Desktop\TestDrive>easy_install-UcythonSearchingforcythonReadinghttp://pypi.python.org/simple/cython/Readinghttp://www.cyt
在Cython胶水声明中,如何表示包含匿名union的Cstruct类型?例如,如果我有一个C头文件mystruct.h包含structmystruct{union{doubleda;uint64_tia;};};然后,在对应的.pyd文件中cdefexternfrom"mystruct.h":structmystruct:#whatgoeshere???我试过这个:cdefexternfrom"mystruct.h":structmystruct:union{doubleda;uint64_tia;};但这只在union行给我“C变量声明中的语法错误”。
我有一个带有虚方法的C++类://C++classA{public:A(){};virtualintoverride_me(inta){return2*a;};intcalculate(inta){returnthis->override_me(a);}};我想做的是用Cython将这个类暴露给Python,在Python中继承这个类并正确重写调用:#python:classB(PyA):defoverride_me(self,a):return5*ab=B()b.calculate(1)#shouldreturn5insteadof2有办法吗?现在我在想,如果我们也可以在Cython
例如,如果我这样做:cdefnp.ndarray[np.int64_t,ndim=1]my_array我的my_array存储在哪里?我会认为,因为我没有告诉cython存储在堆上,所以它会存储在堆栈上,但在进行以下实验后,它似乎存储在堆上,或者以某种方式有效地进行内存管理。如何根据my_array管理内存?也许我遗漏了一些明显的东西,但我找不到任何相关文档。importnumpyasnpcimportcythoncimportnumpyasnpfromlibc.stdlibcimportmalloc,freedefbig_sum():#freezesup:#"a"iscreatedo
由于性能问题,我开始学习Cython。此特定代码试图在交通建模(用于规划)领域实现一些新算法。我决定从一个非常简单的函数开始,我会使用很多次(数亿次)并且肯定会从性能提升中受益。我用三种不同的方式实现了这个功能,并针对相同的参数(为了简单起见)分别测试了1000万次:cython模块中的Cython代码。运行时间:3.35sCython模块中的Python代码。运行时间:4.88s主脚本上的Python代码。运行时间:2.98s如您所见,cython代码比cython模块中的python代码慢45%,比主脚本上编写的代码慢64%。这怎么可能?我哪里出错了?cython代码是这样的:de
我正在用Cython构建一个包。我使用以下作为setup.py的结构:fromdistutils.coreimportsetupfromdistutils.extensionimportExtensionfromCython.Buildimportcythonizeimportnumpyimportscipyextensions=[Extension("xxxxx",["xxxx/xxxxx.pyx"],include_dirs=[numpy.get_include(),"."]),Extension("nnls",["xxxxx/xxxxx.pyx"],include_dirs=[n