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

Lambdify与Python一起使用,但是在Cython中引发异常【代码】

我的网站运行这个Python脚本,如果使用Cython,它将更加优化.最近我需要添加Sympy with Lambdify,这对Cython来说并不顺利. 所以我将问题剥离到最小的工作示例.在代码中,我有一个包含字符串键的字典,其值为列表.我想将这些键用作变量.在下面的简化示例中,只有1个变量,但通常我需要更多.请检查以下示例:import numpy as np from sympy.parsing.sympy_parser import parse_expr from sympy.utilities.lambdify import lambdify, implem...

如何使用Cython将外部C函数导入到IPython笔记本中?【代码】

我想使用Cython将C函数导入到IPython笔记本中.目前,我正在尝试复制Cython documentation中的示例,但是我收到了编译错误. 我的Python代码(来自iPython笔记本):import cython %load_ext Cython———————————-新细胞%%cython cdef extern from "spam.c":void order_spam(int tons)我的C代码:// spam.c #include <stdio.h>static void order_spam(int tons) {printf("Ordered %i tons of spam!\n", tons); }运行此代码,我得...

python – 在Cython中对memoryview进行排序【代码】

如何在Cython中对就地存储器视图进行排序?是否有内置功能可以做到这一点?现在我必须使用numpy数组而使用numpy的排序,这非常慢.解决方法:要跟进我的评论,这里有3个选项(numpy和C和C标准库选项)from libcpp.algorithm cimport sort from libc.stdlib cimport qsortimport numpy as npdef sort_numpy(double[:] a, kind):np.asarray(a).sort(kind=kind)# needs to be compiled with C++ def sort_cpp(double[::1] a):# a mu...

python – Cython Gibbs采样器比numpy采样器慢一点【代码】

我已经实现了一个Gibbs采样器来生成纹理图像.根据beta参数(shape(4)的数组),我们可以生成各种纹理. 这是我使用Numpy的初始函数:def gibbs_sampler(img_label, betas, burnin, nb_samples):nb_iter = burnin + nb_sampleslst_samples = []labels = np.unique(img)M, N = img.shapeimg_flat = img.flatten()# build neighborhood array by means of numpy broadcasting:m, n = np.ogrid[0:M, 0:N]top_left, top, top_right = m[0:...

Cython是用于构建C代码还是用于构建Python扩展?

我是C/C++#开发人员团队中唯一的Matlab用户.我正在过渡到Python,并希望Cython可以帮助我弥合我的工作和同事的工作之间的差距. 我原本以为Cython可以用来将Python代码编译成C源文件,然后可以从Python导入/调用.我希望有两个好处: >我的程序速度提升,和>一个C源文件,可以传递给我的同事进行一些轻微的抛光,然后最终在他们的(C/C++#)包中实现. 不幸的是,看起来后者不是一种选择,但我并不积极.看起来C源文件非常臃肿,有很多对Python的...

Cython错误:没有GIL就不允许来自Python的强制【代码】

尝试编译以下MCE:from libc.math import fabscdef inline double fmax(double x, double y) nogil:return x if x > y else ycdef inline double fsign(double x) nogil :if x == 0.:return 0.elif x > 0.:return 1.else:return - 1.cdef inline double ST(double u, double x) nogil:return fsign(x) * fmax(fabs(x) - u, 0.)除其他错误外,我得到了:Error compiling Cython file: ---------------------------------------------...

如何将Python自然语言处理速度提升100倍:用spaCy/Cython加速NLP【图】

AI前线导读:去年我们发布了基于 Python 的共指解析包之后,社区反馈非常热烈,大家开始在各式应用中使用它,有些应用场景与我们原来的对话用例非常不一样。 之后我们发现,虽然这个解析包的性能对于对话消息来说是足够的,但涉及到大篇幅新闻文章时就远远不够了。 更多干货内容请关注微信公众号“AI前线”,(ID:ai-front)所以我决定好好处理这个问题,最后开发出了比之前版本(每秒几千单词)性能提升百倍的 NeuralCoref v3.0(...

为什么Python和Cython中这两个代码之间存在巨大的性能差异?【代码】

我在Python中遇到了性能问题,我的一位朋友建议我使用Cython搜索更多后,我发现这个代码来自here Python:def test(value):for i in xrange(value):z = i**2if(i==1000000):print iif z < i:print "yes" test(10000001)用Cython:def test(long long value):cdef long long icdef long long zfor i in xrange(value):z = i**2if(i==1000000):print iif z < i:print "yes"test(10000001)在我执行两个代码之后,令人惊讶的是我通过Cytho...

python – Cython中的并行性不起作用【代码】

我有一个以下的Cython代码:from cython import parallel from libc.stdio cimport printfdef test_func():cdef int thread_id = -1with nogil, parallel.parallel(num_threads=10):thread_id = parallel.threadid()printf("Thread ID: %d\n", thread_id)但是,它始终只启动一个线程,即始终只输出Thread ID: 0我在做多线程时做错了什么?解决方法:Cython使用OpenMP的多线程功能. 要启用OpenMP,编译器将需要在编译和链接时传递一个额...

python – cython多次返回【代码】

我想包装这个简单的函数:double foo(int a, int* b){double div = ((double) a) / ((double) *b);*b = a + (*b);return div;} 我想要做的是这样的:cdef pyfoo(int c, int d):res = foo(c, &d);return (res, d) 我想返回一个值列表,但使用cdef它不起作用它给了我erroe:AttributeError没有属性pyfoo如果使用def或cpdef代替cdef,它可以工作. 使用cdef在cython中有一些方法吗?解决方法:Python代码无法访问cdef函数.这就是为什么它...

python – 添加cython比numpy慢的数组?【代码】

我刚刚开始学习cython,所以请原谅我的无知.简单地将两个数组一起添加,cython可以改进numpy吗?我非常糟糕地尝试添加两个数组a b来给出一个新的数组c:import numpy as np cimport numpy as npDTYPE = np.int ctypedef np.int_t DTYPE_tdef add_arrays(np.ndarray[DTYPE_t, ndim=2] a, np.ndarray[DTYPE_t, ndim=2] b, np.ndarray[DTYPE_t, ndim=2] c):cdef int x = a.shape[0]cdef int y = a.shape[1]cdef int val_acdef int val_b...

python – Cython中的引用【代码】

我在Cython中尝试使用引用时遇到了一些麻烦.我正在使用此代码创建一个int并对其进行引用.cdef int i = 10; cdef int& integer_ref = i;但是,我无法弄清楚如何通过integer_ref更改i的值.在C中,我只使用integer_ref = some_other_value,这会将i的值设置为some_other_value. 但是,在cython中执行此操作会返回错误,因为不允许分配给引用.我也尝试了integer_ref [0] = some_other_value,但是它尝试索引int&这是不允许的.我该怎么用?我发...

python – 我可以pip安装一个cython模块并使其pxds可用于cimport吗?【代码】

我正在尝试安装一个Cython库(例如https://github.com/kmike/marisa-trie/tree/master/src),然后通过cimporting从它的pxds继承它在Cython中.有没有办法让库中的相关pxds可供我使用,以便我可以从它们中进行操作?我在Cython docs中检查了一堆相关的信息,比如this,但所有这些都处理了pxd文件在相关文件夹中可用而不是pip安装在某处的情况.解决方法:您可以添加到setup.py的“package_data”设置和关联设置,例如setup(...,packages=['he...

python – Cython中的Modulo

在Cython代码中进行模运算(5%2)的最简单,最快捷的方法是什么?似乎使用%会减慢代码的速度,所以更好的方法是这样做吗?解决方法:根据https://github.com/cython/cython/wiki/enhancements-division,使用编译器指令cython.cdivision.注意,处理负数模数将有不同的语义.

python – 将Cython融合类型转换为C指针【代码】

这是一个关于从Cython融合类型转换为C类型的一般问题,我将用一个最小的例子来描述.考虑表面的C函数模板:template <typename T> void scale_impl(const T * x, T * y, const T a, const size_t N) {for (size_t n = 0; n < N; ++n) {y[n] = a*x[n];} }我希望能够在任何类型和形状的任何numpy ndarray上调用此函数.使用Cython,我们首先声明函数模板:cdef extern:void scale_impl[T](const T * x, T * y, const T a, const size_t N...