草庐IT

cython_bbox

全部标签

python - Cython 的新手......似乎无法正确包装枚举

我是Cython的新手,但我想了解更多,因为我希望能够直接从Python调用相当大且复杂的C/C++代码集。我已经能够很好地运行这些示例,甚至能够包装我正在处理的主要项目的一小部分。但是我一直坚持包装枚举。我试图在一个非常简化的示例中阐明我正在尝试的内容。这是myenum.h中的C代码//myenum.henumstrategy{slow=0,medium=1,fast=2};这是我认为可以在pymyenum.pyx中用作wapper的东西#distutils:language=ccdefexternfrom"myenum.h"namespace"myenum":cdefenumstr

c++ - 在 Cython 中处理自定义 C++ 异常

从Cython调用时,我在处理自定义C++异常时遇到了一些问题。我的情况如下:我有一个对所有异常使用CustomLibraryException的库。我想要的基本上是获取错误消息并引发Python错误。userguide有一些提示,但有点不具体。第一种可能性是:cdefintbar()除了+ValueError这会将CustomLibraryException转换为ValueError,但会丢失错误消息。另一种可能性是使用显式转换错误cdefintraise_py_error()cdefintsomething_dangerous()except+raise_py_error我不太了解

Cython Iterate在没有GIL的Numpy阵列列表上

我想迭代具有不同尺寸的Numpy阵列列表,然后将它们传递到不需要GIL的Cython函数:#ahasT1rowsandMcolumnsa=np.array([[0.0,0.1,0.3,0.7],[0.1,0.2,0.1,0.6],[0.1,0.2,0.1,0.6]])#bhasT2rowsandMcolumnsb=np.array([[1.0,0.0,0.0,0.0],[0.1,0.2,0.1,0.6]])#chasT3rowsandMcolumnsc=np.array([[0.1,0.0,0.3,0.6],[0.5,0.2,0.3,0.0],[0.0,1.0,0.0,0.0],[0.0,0.

在Cython脚本中使用MEMSET代替NP.Zeros进行速度增长

我开始使用Scipy界面到Fortran库(BLAS/LAPACK),如下所示:使用Scipy界面和Cython直接调用Blas/Lapack并提出了一个解决方案,但必须求助于使用numpy.zeros实际上,直接调用Fortran代码而丧失了任何速度收益。问题是Fortran代码需要一个0值的输出矩阵(它在内存中的矩阵上运行)才能匹配Numpy版本(np.outer).因此,我有点困惑,因为Python中的1000x1000零矩阵仅服用8U(使用%TimeIt或0.008ms),那么为什么添加Cython代码杀死运行时,请指出我也在MemoryView上创建它?(基本上,在1000x1000

不同坐标系下3D bbox通过中心点坐标和长宽高求8个角点问题

这种问题可分解为三步:1.根据长(l)宽(w)高(h)计算出一个和正向运动方向重合的3Dbbox的8个角点坐标向量:x_corners=[-l/2,-l/2,l/2,l/2,-l/2,-l/2,l/2,l/2]y_corners=[w/2,-w/2,-w/2,w/2,w/2,-w/2,-w/2,w/2]#z_corners=[0,0,0,0,h,h,h,h]#forkitti3ddatasetz_corners=[-h/2,-h/2,-h/2,-h/2,h/2,h/2,h/2,h/2]#forourlidar-coordination-baseddataset2.根据3Dbbox的朝向角(ro

Cython 中的 C++ 结构继承

我正在用cython包装一个C++库。在头文件中,有一些结构继承自其他结构,如下所示:structA{inta;};structB:A{intb;};这在我的cdefextern...block中应该如何显示? 最佳答案 UsingC++inCython没有提到任何特别的东西:#file:pya.pyxcdefexternfrom"a.h":cdefcppclassA:intacdefcppclassB(A):intb包装类:#file:pya.pyxcdefclassPyB:cdefB*thisptrdef__cinit__(se

c++ - 用 Cython 包装枚举类

我正在尝试将枚举类包装在C++头文件中,以便在cython项目中使用。例如,这怎么可能enumclassColor{red,green=20,blue};用Cython包裹。 最佳答案 CPP类enumclassColor{red,green=20,blue};类型定义cdefexternfrom"colors.h":cdefcppclassColor:pass颜色类型的定义cdefexternfrom"colors.h"namespace"Color":cdefColorredcdefColorgreencdefColorblue

windows - python 3.4 : compile cython module for 64-bit windows

我有一个.pyx模块,我一直在尝试通过各种方式编译它以在Windows上与64位python3.4一起使用,但没有成功。经过大量的尝试和错误,它确实可以编译pythonsetup.pybuild_ext--inplace--compiler=mingw32当然,这不适用于64位python。以msvc为编译器,错误为File"C:\Python34\lib\distutils\msvc9compiler.py",line287,inquery_vcvarsallraiseValueError(str(list(result.keys())))ValueError:['path']Win

在Cython编写快速的3D矩阵和矢量库

作为重写Cython的游戏引擎的一部分,我正在尝试提高我的Python+Numpy类的性能,用于Matrix和VectorMath,因为这是我以前遇到的主要瓶颈之一。这组模块已定义了类型的类Vector2/3/4,Matrix2/3/4,和Quaternion.从GlmatrixJavaScript库,我认为这次我可以做的一件事是从基于类的系统转换为具有一堆数学功能的模块,以减少更多的开销。这样一来,我就不会每次添加两个向量一起返回一个新对象,而是我不必构建自定义对象。为了测试这一点,我写了一个基准演示,用于创建两个Vec2对象a和b将它们概括为组件以获取Vec2目的out。该代码被分解为ma

Cython加密python代码防止反编译

本方法适用于Linux环境下:1.安装库Cythonpip3installCython==3.0.0a10 2.编写待加密文件:hello.pyimportrandomdefac():i=random.randint(0,5)ifi>2:print('success')else:print('failure') 3.编写加密脚本importosimportglobfromdistutils.coreimportsetupfromCython.Buildimportcythonize#需要加密py文件所在文件夹,批量加密path_list=["/opt/test/te","/opt/test"]