python3.4、windows10、cython0.21.1我正在用cython将这个函数编译成cdefweakchecksum(data):"""Generatesaweakchecksumfromaniterablesetofbytes."""cdeflonga,b,la=b=0l=len(data)foriinrange(l):a+=data[i]b+=(l-i)*data[i]return(b产生这个错误:“OverflowError:Pythonint太大而无法转换为Clong”我也试过将它们声明为无符号长整数。我使用什么类型来处理非常大的数字?如果它对于aclong来说
我有一个现有的python类X,我想执行以下操作:frommy_python_moduleimportXcdefclassY:cdefXtest但这不是开箱即用的,cdef只接受C类型,而不是Python类。任何解决方法? 最佳答案 我不认为你可以(http://docs.cython.org/src/userguide/sharing_declarations.html#sharing-extension-types)但你可以解决它使用__cinit__来断言属性具有正确的类型。扩展类型属性的声明cdefpublicobjectx
Cythondocumentation很好地解释了它们的用途、如何声明它们以及如何使用它们。然而,我仍然不清楚它们到底是什么。例如,像这样来自numpy数组的简单赋值:my_arr=np.empty(10,np.int32)cdefint[:]new_arr=my_arr可以使my_arr的访问/赋值更快。幕后发生了什么?Numpy应该已经以连续的方式分配内存中的元素,那么内存View有什么用呢?显然没那么多,实际上numpy数组new_arr的memoryview赋值应该等价于cdefnp.ndarray[np.int32_t,ndim=1]new_arr=np.empty(10,n
大编辑:================为了清楚起见,我删除了旧结果并用更新的结果替换它。问题还是一样:我是否正确地同时使用了Cython和Numba,以及可以对代码进行哪些改进?(我有一个更新更简单的临时IPython笔记本,其中包含所有代码和结果here)1)我想我明白了为什么最初Cython、Numba和CPython之间没有区别:这是因为我喂了它们numpy数组作为输入:x=np.asarray([x_i*np.random.randint(8,12)/10forx_iinrange(n)])代替列表:x=[x_i*random.randint(8,12)/10forx_iin
我正在寻找一种高效的数据结构来表示Python/Cython中的一个非常大的整数矩阵,重点是元素方面的操作。我目前正在构建一个模型,该模型需要在一个大型、高度稀疏的矩阵(在2MMx500k矩阵上进行大约500亿次读/写)上进行大量逐元素操作。以前,我对较小的数据进行过实验,并使用Python和Cython和Numpy数组,理想情况下我希望继续使用现有基础架构的某些部分。到目前为止,我已经研究/实现了一些选项。它们可能没有得到完全优化,但所有的实现都应该足够好,以便对每种方法的潜力给出一个现实的想法。我通过创建2MMx500k矩阵、添加25MM元素然后再次删除它们进行了测试。这反射(re
我想知道在声明函数时def、cdef和cpdef之间的区别。def和其他def之间的区别或多或少是清楚的。而且我还看到,有时它会在声明中添加返回类型(cdefvoid/double/int...name),有时则不会。我也想知道如何在cython中声明一个字符串变量,因为我不知道,我把它声明为对象。 最佳答案 主要区别在于可以从哪里调用函数:def函数可以从Python和Cython调用,而cdef函数可以从Cython和C调用。两种类型的函数都可以使用类型化和非类型化参数的任意混合声明,并且在这两种情况下,Cython将内部结构编
传递dtypenp.float64_t的numpy数组工作正常(如下),但我不能传递字符串数组。这是有效的:#cython_testing.pyximportnumpyasnpcimportnumpyasnpctypedefnp.float64_tdtype_tcdeffunc1(np.ndarray[dtype_t,ndim=2]A):printAdeftesting():chunk=np.array([[94.,3.],[44.,4.]],dtype=np.float64)func1(chunk)但我做不到:我找不到numpy字符串数据类型的匹配“类型标识符”。#cython_te
我正在对来自http://docs.cython.org/src/tutorial/numpy.html的素数生成器的变体进行一些性能测试.以下性能指标是kmax=1000纯Python实现,在CPython中运行:0.15s纯Python实现,在Cython中运行:0.07sdefprimes(kmax):p=[]k=0n=2whilek纯Python+Numpy实现,CPython运行:1.25simportnumpydefprimes(kmax):p=numpy.empty(kmax,dtype=int)k=0n=2whilek使用int*的Cython实现:0.003sfrom
我将我的python文件用cython化为example.c和example.so我可以将这些文件导出为python模块并访问python中的函数测试.py:importexampleexample.test()这样我就可以轻松地在python中导入我的cythonizedpython文件。我如何使用cgo在golang中类似地导入这些文件? 最佳答案 Cython代码包括一堆代码包装,用于创建python模块并在Python对象和C类型之间进行转换。您可能不需要这些。例如,在cgo中一个非常简单的helloworld可能只是:/*
我正在尝试使用cython将python源代码foo.py编译为C.在foo.py中:print"HelloWorld"我正在运行的命令是cythonfoo.py。问题是在使用gcc编译foo.c时,我得到错误:对“main”的undefinedreference。 最佳答案 将代码从python转换为c(使用Cython)时,它会将其转换为可以编译为共享对象的c代码。为了使其可执行,您应该将“--embed”添加到cython转换命令中。此标志添加了您需要的“主要”功能,因此您可以将C代码编译为可执行文件。请注意,您需要pytho