我试图让python中的循环尽可能快地运行。所以我深入研究了NumPy和Cython。这是原始的Python代码:defcalculate_bsf_u_loop(uvel,dy,dz):"""Calculatebarotropicstreamfunctionfromzonalvelocityuvel(t,z,y,x)dy(y,x)dz(t,z,y,x)bsf(t,y,x)"""nt=uvel.shape[0]nz=uvel.shape[1]ny=uvel.shape[2]nx=uvel.shape[3]bsf=np.zeros((nt,ny,nx))forjninrange(0,nt)
我有一个问题。我想分发我的cython驱动的包,但我看不到在setup.py中构建它们的简单方法。我希望setup.py能够:最重要的是:在没有cython的情况下安装我的包(从预先生成的C文件或通过预先安装cython)在sdist上重建(运行cythonize)包不需要硬编码我的cython模块列表(只需使用glob或其他东西)能够在没有.c文件(不应存储在git中)或.pyx(可能不会分发)的情况下工作。当然,至少其中一套会一直存在。目前在我痒痒的包里,我正在使用这个相当复杂的代码:importosfromglobimportglobfromdistutils.command.b
我需要一个python对象数组来创建一个trie数据结构。我需要一个像元组一样固定长度、像列表一样可变的结构。我不想使用列表,因为我希望能够确保列表的大小完全正确(如果它开始分配额外的元素,内存开销可能会很快增加,因为trie变得更大)。有没有办法做到这一点?我尝试创建一个对象数组:cdefclassTrieNode:cdefobjectmembers[32]...但这给出了一个错误:ErrorcompilingCythonfile:------------------------------------------------------------...cdefclassTrieN
令人困惑的是,如果你想创建一个你使用的数组chunk=np.array([[94.,3.],[44.,4.]],dtype=np.float64)但是如果你想在buffer中定义类型引用,你用cdeffunc1(np.ndarray[np.float64_t,ndim=2]A):printA注意np.float64之间的区别和np.float64_t.我的猜测我猜typeidentifier是用类CythonC显式创建的typedef句法ctypedefnp.float64_tdtype_t但是numpytype只是Python类型。>>>type(np.float64)关于dtype
在我的代码中,我通常使用numpy数组来连接方法和类。优化我程序的核心部分,我将cython与那些numpy数组的c指针一起使用。不幸的是,我目前声明数组的方式很长。例如,假设我有一个方法应该返回一个numpy数组someArrayNumpy,但在函数指针*someArrayPointers中应该使用速度。这就是我通常声明的方式:cdef:numpy.ndarraysomeArrayNumpy=numpy.zeros(someArraySize)numpy.ndarray[numpy.double_t,ndim=1]someArrayBuff=someArrayNumpydouble*
如何高效地将cython中的malloc数组指针(或numpy数组指针)返回给python3。只要我不返回数组指针,cython代码就可以完美运行我想:defdoublecomplex*randn_zig(intn):...r=malloc(n*n*sizeof(doublecomplex))...returnrc11(gcc11)等价物是:doublecomplex*randn_zig(intn){r=malloc(n*n*sizeof(doublecomplex))returnr}我试过了randn_zig(intn):和randn_zig(r,intn):和其他排列到目前为止都没
我正在尝试从使用pyximport转换为通过distutils进行构建,我被它在放置.so文件的位置所做的奇怪选择所困扰。因此,我决定从cython文档构建教程,却发现它打印了一条消息,说明其正在构建,但什么也没做。我在virtualenv里面,cython、python2.7等都安装在里面。首先是基础知识:$cython--versionCythonversion0.21.2$catsetup.pyfromdistutils.coreimportsetupfromCython.Buildimportcythonizeprint"hellobuild"setup(ext_modules
我正在用Cython编写Python2.7扩展模块。我如何创建一个Python对象来实现新式缓冲区接口(interface),该接口(interface)包装了C库提供给我的内存块?内存块只是一串字节,而不是结构或多维数组。我得到了一个constvoid*指针和一个长度,以及有关指针保持有效时间的一些详细信息。我无法复制内存——这会降低我的应用程序的性能。对于旧式缓冲区对象,我可以简单地使用PyBuffer_FromMemory(),但我似乎找不到一种类似的简单方法来生成新式缓冲区对象。我是否必须创建自己的类来实现缓冲区接口(interface)?或者Cython是否提供了一种简单的方
我的ubuntu16x86_64上有简单的python+cython项目(来自http://docs.cython.org/src/tutorial/cython_tutorial.html的helloworld示例)。我可以使用cython为x86_64构建这个项目。如何在不使用真正的armv7板/cpu的情况下为armv7版本的ubuntu15构建项目?我有arm-linux-gnueabihf-gcc(http://packages.ubuntu.com/xenial/devel/gcc-arm-linux-gnueabihf),它可以为armv7编译简单的C程序。如何更改cyt
目前我正在玩Cython并试图弄清楚如何在heroku上托管CythonFlask应用程序(例如)。假设我的项目看起来像这样(在cython编译之后):_/cythonheroku|--requirements.txt|--run.py|--Procfile|__/app|--__init__.py|--app.c|--app.cpython-36m-darwin.so|--app.pyx现在,app.pyx中有一个标准的Flask应用程序,其中包含一些cython调整,如下所示:#cython:infer_types=TruefromflaskimportFlaskapp=Flask