【python – Cython并行读取文件并绕过GIL】教程文章相关的互联网学习教程文章

python – Cython将字符串传递给C作为字节【代码】

我需要在python中构建一个字符串并将其传递给包装的C lib. C lib定义了这个函数:unsigned char load(char const *FileName)在.pyx文件中:def test():PATH = '/usr/lib/libnx.so'PATH = <char*>PATHload(PATH)但我得到:TypeError:期望的字节,str找到 我已经尝试编码python字符串,但得到相同的错误.解决方法:在Python中,str对象不是C中的字节数组.为此,您必须对字符串进行编码.默认值为UTF-8编码,向后兼容ASCII. 以下是传递字节数...

cython函数输出与python函数输出略有不同【代码】

我已经通过向某些变量添加类型将python函数转换为cython等效函数.但是,cython函数产生的输出与原来的python函数略有不同. 我已经在这篇文章中了解了这种差异的一些原因Cython: unsigned int indices for numpy arrays gives different result但即使我在这篇文章中学到了什么,我仍然无法使用cython函数产生与python相同的结果. 所以我已经汇总了4个功能,说明了我的尝试.有人可以帮助揭开为什么我会为每个函数获得稍微不同的结果吗?...

python – 你能用cython而不是pyx文件编译.py文件吗?

我有一个文件foo.py,它包含一个非常慢的函数,需要8分钟来计算.但是,当我将文件更改为foo.pyx并使用cython进行编译而没有其他更改时,计算需要5分钟. 我的问题是:如果我运行cython foo.py而不是cython foo.pyx然后运行gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I /usr/include / python2.7 -o foo.so foo.c 当我运行import foo时,python会导入.py文件还是编译后的.so文件?pyx真的需要在那里吗?有没有办...

python – Cython C模板【代码】

我是cython的新手,我试图包装一个定义为的模板化矢量类template < typename T, uint N > struct Vector{}我很难了解cython如何使用模板,特别是那些以int作为参数的模板.我在文档中读到还没有支持int作为模板参数.我该怎么做呢?解决方法:我找到了简单的解决方案! 例如,在C头文件中,您可以声明一个typedeftypedef Vector<float,3>; Vector3f;在您的cython文件中,您可以声明它,现在您可以使用该类中的所有函数和运算符.cdef exte...

python – 仅在setup.py中编译可选的cython扩展【代码】

我有一个完全在python中实现的python模块. (出于便携性原因.) 在cython模块中重复了一小部分的实现.尽可能提高性能. 我知道如何使用distutils安装cython创建的.c模块.但是,如果机器没有安装编译器,我怀疑即使模块仍然可以在纯python模式下使用,安装程序也会失败. 有没有办法在可能的情况下编译.c模块但正常失败并在没有它的情况下安装如果无法进行编译?解决方法:我想您必须在setup.py和模块中的一个__init__文件中进行一些修改. 假...

python – Cython中complex.real和creal(复杂)之间的区别【代码】

为了在cython中将实部与复杂部分分开,我通常使用complex.real和complex.imag来完成工作.然而,这确实生成了在html输出中略带“python red”的代码,我猜我应该使用creal(complex)和cimag(complex)代替. 考虑以下示例:cdef double complex myfun():cdef double complex c1,c2,c3c1=1.0 + 1.2jc2=2.2 + 13.4jc3=c2.real + c1*c2.imagc3=creal(c2) + c1*c2.imagc3=creal(c2) + c1*cimag(c2)return c2c3的分配给出: __pyx_v_c3 = __Pyx...

python – Cython Memoryviews – 大数组上的Seg错误?【代码】

即使非常小的简单整数数组也会看到奇怪的行为.%%cython import numpy as np cimport cython cimport numpy as npdef hi():DEF MAX = 10000000cdef int a[MAX],icdef int[:] a_mv = a这会崩溃,但对较小视图的观看会影响我的观看.这不是一个明显的内存问题,因为有足够的内存可用于1000万个内存……解决方法:正如Kevin在评论中提到的,问题不在于RAM,而在于堆栈.你正在使用malloc et friends分配一个包含1000万个元素的数组,当你真的应...

python – Cython优化【代码】

我正在用Python编写一个相当大的模拟,希望从Cython中获得一些额外的性能.但是,对于下面的代码,我似乎没有那么多,即使它包含一个相当大的循环.大约100k次迭代. 我是否让一些初学者犯了错误,或者这个循环大小只是为了小而产生很大影响? (在我的测试中,Cython代码仅快了约2倍).import numpy as np; cimport numpy as np; import mathctypedef np.complex64_t cpl_t cpl = np.complex64def example(double a, np.ndarray[cpl_t,ndim=2...

python – Cython:使用融合类型在一个参数中传递多个numpy数组【代码】

我已经重写了从C到Cython的算法,所以我可以利用融合类型,并使从python调用更容易.该算法可以使多个数组与其他一些参数一起工作.数组被接受为指针指针(例如).我想我会通过提供多个数组作为numpy数组的元组来从python调用cython代码,但要做到这一点会使融合类型变得混乱.这是我现在如何工作的一个简单示例:import numpy cimport numpyctypedef fused test_dtype:numpy.float32_tnumpy.float64_tcdef int do_stuff(test_dtype **some...

python – cygdb ImportError:没有名为’Cython’的模块【代码】

我想调试我的Cython代码并按照here所描述的确切步骤编译.我的Cython代码编译($cython –gdb xxx.pyx然后$python setup.py build_ext –inplace)但似乎cygdb无法正常工作我的系统.我使用的是Ubuntu 14.04,Python 2.7.6,Cython 0.23.4.我也尝试过另一个系统(Ubuntu 15.04),但也没有运气.也没有重新安装Cython工作. $python -c’import Cython’适用于我的系统,我相信这表明Cython已正确安装. 我用Google搜索,但找不到解决方案.如果有...

python – Cython:创建返回数组的C函数【代码】

我想创建一个Cython函数,它读取一个数组并返回一个数组.这个函数将从其他cdef函数中调用,而不是python def函数.这就是我所拥有的. 在我的.pxd文件中:cdef int[:] array_test(double *x) nogil在我的.pyx文件中:cdef inline int[:] array_test(double *x) nogil:cdef int output[2]output[0]=1output[1]=9return output但是当我编译时,我得到错误:“不允许没有gil的操作”有人可以帮忙吗?解决方法:可能存在一个误解:此函数不返...

python – 用cython扩展numpy【代码】

我试图包装一个头文件,其中包含许多这样的函数 test.hvoid test(int N, int* data_in, int* data_out);所以我可以使用那些来自numpy. 现在我有以下cython代码: test.pyximport numpy as np cimport numpy as npctypedef np.int_t itype_tcdef extern from 'VolumeForm.h':void _test 'test' (int, int*, int*)def wrap_test(np.ndarray[itype_t, ndim=2] data):cdef np.ndarray[dtype_t, ndim=1] outout = np.zeros((data.shape[0...

Python扩展是由Cython / Pyrex线程安全生成的吗?

如果没有,有没有办法通过编程方式保证线程安全? 澄清一下,在谈论“线程安全”时,我指的是Python线程,而不是操作系统级别的线程.解决方法:这完全取决于你的Cython代码和Python的GIL之间的交互,详见here.如果你没有做任何特殊的事情,Cython生成的代码将尊重GIL(如同不使用的C编码扩展一样) GIL释放宏);这使得这些代码“像Python代码一样线程安全” – 这不是很多,但比完全自由线程代码更容易处理(你仍然??需要构建多线程协作和同步,...

python – Cython中的64位整数

我正在尝试使用Cython将C库(pHash)与Python接口,但我遇到了一些类型的问题.库函数使用“unsigned long long”,我找不到用这种类型声明变量和参数的方法.我搜索了一下我可以和cdef一起使用的类型列表,但我什么也没找到.任何人都可以指向我这样的列表(如果它存在)或以其他方式建议在Cython中使用64位类型的方法?谢谢.解决方法:这是我使用无符号long long和cython的答案之一 Simple Python Challenge: Fastest Bitwise XOR on Data B...

python – 使用cython将numpy数组列表传递给C.【代码】

我有一个列表list_of_arrays的3D numpy数组,我想用模板传递给C函数int my_func_c(double **data, int **shape, int n_arrays)这样的data[i] : pointer to the numpy array values in list_of_arrays[i] shape[i] : pointer to the shape of the array in list_of_arrays[i] e.g. [2,3,4]如何使用cython接口函数调用my_func_c? 我的第一个想法是做类似下面的事情(有效),但我觉得有一个更好的方法就是使用numpy数组而不需要malloci...