草庐IT

python - Cython 是否支持 C++11 容器?

Cython为我们提供了一种导入C++标准库数据结构的简单方法,例如:fromlibcpp.vectorcimportvectorfromlibcpp.utilitycimportpair但是C++11引入的新容器呢:std::unordered_map、std::unordered_set等。它们是否以相同的方式受支持?我找不到合适的导入语句。 最佳答案 当前的cython版本允许它们。确保您的setup.py包含如下内容:ext_module=Extension("foo",["foo.pyx"],language="c++",

小数选项大于 2 的 python np.round()

Python有默认的round()函数,但我用cython编程,想用numpy函数替换pythonic代码。但是,在终端中进行实验时,我得到了以下结果。>>>np.around(1.23456789)1.0>>>np.around(1.23456789,decimals=0)1.0>>>np.around(1.23456789,decimals=1)1.2>>>np.around(1.23456789,decimals=2)1.23>>>np.around(1.23456789,decimals=3)1.2350000000000001>>>np.around(1.23456789,d

python - 二进制 numpy 数组之间的快速汉明距离计算

我有两个包含二进制值的相同长度的numpy数组importnumpyasnpa=np.array([1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,1,1,0])b=np.array([1,1,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,1,0,1])我想尽快计算出它们之间的汉明距离,因为我要进行数百万次这样的距离计算。这是一个简单但缓慢的选项(取自维基百科):%timeitsum(ch1!=ch2forch1,ch2inzip(a,b))10000loops,bestof3:79usperloop我想出了更快的选项,灵感来自这里关于堆栈溢出

python - 在 Cython 中小写 unicode 字符串的 numpy 数组的最快方法

Numpy的字符串函数都非常慢,而且性能不如纯Python列表。我希望使用Cython优化所有普通字符串函数。例如,让我们采用一个包含100,000个数据类型为unicode或对象的unicode字符串的numpy数组,并将每个字符串小写。alist=['JsDated','УКРАЇНА']*50000arr_unicode=np.array(alist)arr_object=np.array(alist,dtype='object')%timeitnp.char.lower(arr_unicode)51.6ms±1.99msperloop(mean±std.dev.of7runs,

python - Cython:将单个元素分配给多维内存 View 切片

每当我将单个值分配给多维内存View的切片时,Cython似乎使用了错误的步幅,除非切片沿着第一维。我在下面给出一个完整的例子:#bug.pyimportnumpyasnpdefbug():#cdefint[:,::1]aa=2*np.ones((2,2),dtype=np.intc)a[:,:1]=1print(np.asarray(a))如果我们在Python中运行它(例如python3-c'importbug;bug.bug()'),我们得到[[12][12]]如预期的那样打印出来。我现在通过将文件重命名为bug.pyx用Cython编译它,将以下内容保存在同一目录的Makefi

python - 如何在 Cython 中包装 C 结构以便在 Python 中使用?

为了获得一些学习经验,我尝试在Cython中将SDL(1.2.14)的一些部分包装在Python3.2的扩展中。我在弄清楚如何将C结构直接包装到Python中时遇到问题,以便能够像这样直接访问其属性:struct_name.attribute例如,我想采用结构SDL_Surface:typedefstructSDL_Rect{Uint32flagsSDL_PixelFormat*formatintw,hUint16pitchvoid*pixelsSDL_Rectclip_rectintrefcount}SDL_Rect;并且能够像在python中那样使用它:importSDL#init

python - 导入 Cython 模块时出现 undefined symbol 错误

我想将我的一个C++类作为Python模块提供。该类在headerFoo.h中声明,并在.cppFoo.cpp中实现。(g++-4.5,Ubuntux86_64)。这是一个非常非常简单的类:Foo.cpp:Foo::Foo():alfa(1.0),beta(1){}Foo::~Foo(){}Foo.h:classFoo{public:Foo()Foo(constFoo&orig);~Foo();doublealfa;intbeta;};我创建了一个setup.py,如Cython教程所示:setup.pyfromdistutils.coreimportsetupfromdistutil

python - Cython 回调适用于函数,但不适用于绑定(bind)方法

我正在为C++库实现一个基于cython的接口(interface)。我实现了一个回调系统,它适用于普通函数,但在传入绑定(bind)方法时会奇怪地失败。这是我的cython代码的一部分:cdefexternfrom"VolumeHapticTool.h":cdefcppclassHDButtonEvent:boolisPressed()unsignedintgetButtonId()Vec3[float]getPosition()ctypedefvoid(*HDButtonCallback)(HDButtonEvent,void*)cdefexternfrom"Scene.h":cd

python - 给数组切片赋值很慢

我正在尝试通过在Cython中实现来优化Python算法。我的问题是关于以下代码中存在的某个性能瓶颈:@cython.boundscheck(False)#turnoffbounds-checkingforentirefunctiondefanglesToRGB(np.ndarray[double,ndim=2]y,np.ndarray[double,ndim=2]x):cdefdoubleanglecdefdoubleHpcdefdoubleCcdefdoubleXcdefnp.ndarray[double,ndim=3]res=np.zeros([y.shape[0],y.shap

python - Python 列表中的额外元素

我正在尝试使用Cython将Python列表转换为Cython数组,反之亦然。Python列表包含0-255范围内的数字,因此我将数组类型指定为unsignedchar数组。这是我进行转换的代码:fromlibc.stdlibcimportmalloccdefto_array(listpylist):cdefunsignedchar*arrayarray=malloc(len(pylist)*sizeof(unsignedchar))cdeflongcount=0foriteminpylist:array[count]=itemcount+=1returnarraycdefto_lis