【编译Python代码以使用Cython静态链接可执行文件】教程文章相关的互联网学习教程文章

python – 用cython包装C类,让基本的例子工作【代码】

我正在尝试学习如何使用cython包装c代码.为了做到这一点,我从cython网页上的基本c示例开始,在这里找到:http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html 这看起来很简单,但我无法让它工作.这是我做的: Rectangle.h和Rectangle.cpp直接从网页复制 Rectangle.h:namespace shapes { class Rectangle { public:int x0, y0, x1, y1;Rectangle(int x0, int y0, int x1, int y1);~Rectangle();int getLength();int getHe...

python – 在Cython中传递有界方法作为参数【代码】

我试图将一些C代码包装到Cython中,并且在尝试将类中的方法作为参数传递给函数时遇到了一些麻烦. 我不知道它是否更清楚,但是A类代表一个统计模型(因此myAMethod不仅使用传递的参数而且使用许多实例变量),而B有不同的方法来最小化传递的函数. 在C中我有这样的风格: A级{上市: double myAMethod(double *)};B级{上市: double myBMethod(A&,double(A :: * f)(double *)} 所以我想要做的是在Cython代码中使用A和B的实例.我在包...

python – Cython中用于循环调用的快速基本线性代数【代码】

我正在尝试在cython中编写一个函数来进行蒙特卡罗模拟.该函数涉及多个小的线性代数运算,如点积和矩阵求逆.由于该功能被称为成千上万次,所以numpy开销占了很大一部分成本.三年前有人提出这个问题:calling dot products and linear algebra operations in Cython?我试图使用两个答案的建议,但第一个scipy.linalg.blas仍然通过一个python包装器,我没有真正得到任何改进.第二种,使用gsl包装器也相当慢,当向量的尺寸非常大时,往往会冻结...

当__init__.py存在时,使用setup构建cython扩展的Python会创建子文件夹【代码】

我正在尝试使用以下setup.py编译一个简单的cython模块:from distutils.core import setup from Cython.Build import cythonizesetup(ext_modules=cythonize("verifier_c.pyx"), )我有以下文件夹结构:. c_ext/__init__.pyverifier_c.pyxsetup.py如果我运行以下内容:python setup.py build_ext --inplace我得到一个额外的c_ext子文件夹,如下所示:. c_ext/build/...c_ext/verifier_c.so__init__.pyverifier_c.pyxsetup.py但是如果...

python – Cython并行读取文件并绕过GIL【代码】

试图弄清楚如何使用Cython绕过GIL并为IO绑定任务并行加载文件.现在我有以下Cython代码试图加载文件n0.npy,n1.py … n100.npydef foo_parallel():cdef int ifor i in prange(100, nogil=True, num_threads=8):with gil:np.load('n'+str(i)+'.npy')return []def foo_serial():cdef int ifor i in range(100):np.load('n'+str(i)+'.npy')return []我没有注意到显着的加速 – 有没有人有这方面的经验? 编辑:我平均每小时900毫秒,连续...

python – cython memoryview比预期慢【代码】

我已经开始在cython中使用memoryviews来访问numpy数组.它们具有的各种优点之一是它们比旧的numpy缓冲区支持快得多:http://docs.cython.org/src/userguide/memoryviews.html#comparison-to-the-old-buffer-support 但是,我有一个例子,旧的numpy缓冲支持比memoryviews快!怎么会这样?!我想知道我是否正确使用了记忆库? 这是我的测试:import numpy as np cimport numpy as np cimport cython@cython.boundscheck(False) @cython....

python – Cython 0.2:prange意外地降低了代码速度【代码】

在两种情况下考虑优化的cython代码:for j in xrange(8):for x in xrange(1, 600):tmp[j] = 0.0for y in xrange(1, 800):tmp[j] += mag[j, x - 1, y - 1]hgi_out[j, x, y] = tmp[j] + hgi_out[j, x - 1, y] 和:for j in prange(8): # < prange used for parallelization with openmpfor x in xrange(1, 600):tmp[j] = 0.0for y in xrange(1, 800):tmp[j] += mag[j, x - 1, y - 1]hgi_out[j, x, y] = tmp[j] + hgi_out[j, x...

Python代码找不到cython函数,尽管它甚至不应该尝试找到它.为什么?【代码】

底部是两个文件,一个应该执行的超级最小python文件和一个cython文件.如果将它们保存为文件,则将cython命名为“cycode.pyx”,一旦执行另一个文件(例如“start.py”),它将自动编译并运行 问题 如果你执行纯python文件/.start.py,你将从Cython中获得属性错误.Exception AttributeError: “‘cycode.Item’ object has no attribute‘export” in ‘cycode.insertItem’根据我的经验,这意味着Python函数或对象试图访问未声明为public的...

python – Cython Numpy变量ndim?【代码】

我需要初始化变量形状的数组(dim,)(nbins,)* dim,其中dim通常很小,但nbins可能很大,所以数组有ndims = dim 1.例如,如果dim = 1我需要一个形状数组(1,nbins),如果dim = 2,形状为(2,nbins,nbins)等. 是否可以相应地键入numpy数组?我试过类似的东西ctypedef uint32_t uint_tctypedef float real_t...cdef:uint_t dim = input_data.shape[1]np.ndarray[real_t, ndim=dim+1] my_array = np.zeros((dim,) + (nbins,)*dim, dtyp...

python – Cython缓冲区协议示例错误【代码】

我正在尝试这个网址的例子. http://cython.readthedocs.io/en/latest/src/userguide/buffer.html 为了测试它我做了以下.import pyximport pyximport.install(build_dir = 'build') import ctestm = ctest.Matrix(10) m.add_row() print(m)当我调用m.add_row()函数时,这给了我一个错误TypeError:’int’对象不可迭代 在类中,add_row定义为from cpython cimport Py_buffer from libcpp.vector cimport vectorcdef class Matrix:cdef...

python – Cython函数指针和异常【代码】

我正在尝试使用cython包装现有的C库.该库使用回调,我想重定向以执行python代码.让我们说标题中的对应行如下:typedef RETCODE (*FUNC_EVAL)(int a, int b, void* func_data);其中返回码用于表示错误. API到创建一个对应的C结构如下:RETCODE func_create(Func** fstar,FUNC_EVAL func_eval,void* func_data);我添加了一个cython标头/实现文件.标题包含typedef:ctypedef RETCODE (*FUNC_EVAL)(int a,int b, void* func_data)该实现...

python – 通过从列表复制到numpy数组来加速cython循环【代码】

我正在编写一些性能密集型代码,并希望从cythonistas那里得到一些关于如何进一步改进它的反馈.我写的函数的目的有点难以解释,但他们所做的并不是那么令人生畏.第一个(粗略地)采用两个数字列表的字典并将它们连接起来以获得一个数字列表的字典.它只运行一次所以我不太关心优化它.第二个调用第一个,然后使用其结果基本上将存储在numpy数组中的索引与数组列表中的数字交叉,以在(pybloomfiltermmap)bloom过滤器上形成查询(新数字). 我已...

python – 如何在Cython中构建元组?【代码】

我是cython的新手,我只是在寻找一种简单的方法,将一个numpy数组转换为一个元组,然后可以添加到字典中和/或在字典中查找. 在CPython中,我可以使用PyTuple_New并迭代数组的值(将每个值添加到元组,就好像我将它们附加到列表中一样). Cython似乎没有通常的CPython功能.我怎么能变成一个数组:array([1,2,3])进入一个元组:(1, 2, 3)解决方法:Cython是Python的超集,因此任何有效的Python代码都是有效的Cython代码.在这种情况下,如果你有...

python – 再没有Cython的速度提升?【代码】

以下是我的cython代码,目的是做一个bootstrap.def boots(int trial, np.ndarray[double, ndim=2] empirical, np.ndarray[double, ndim=2] expected):cdef int length = len(empirical)cdef np.ndarray[double, ndim=2] ret = np.empty((trial, 100))cdef np.ndarray[long] choicescdef np.ndarray[double] mcdef np.ndarray[double] ncdef long ocdef int icdef int jfor i in range(trial):choices = np.random.randint(0, length...

如何使用纯Python和Cython版本分发模块【代码】

我有一个纯Python模块,我想用Cython重写一些子模块.然后我想将新的Cython子模块添加到原始Python模块中,并使它们仅作为选项使用,这意味着cythoning模块不是必需的(在这种情况下应该使用’旧的’纯Python模块). 这是一个例子:my_module- __init__.py- a.py- b.py- setup.py其中a.py包含导入b. 我想在Cython中编写b.py.想法是添加一个包含.pyx文件的文件夹,例如:my_module- __init_.py- a.py- b.py- setup.pycython-b.pyxsetup.py将...

链接 - 相关标签