我有以下Python代码:
我在Windows powershell中运行
编辑:我添加了for循环以解决问题,但我应该如何改进cython代码?当我查看生成的html文件时,仍然有许多黄色高亮显示(Python交互)。具体而言,我想问如何使用
class DisjointSet:
def __init__(self, n):
self.parent = list(range(n))
self.rank = [0 for x in range(n)]
def find(self, v):
if v != self.parent[v]:
self.parent[v] = self.find(self.parent[v])
return self.parent[v]
其余的代码在“代码复杂度”方面类似,这里不再列出。
因此,我想将上述代码翻译成Cython代码(我了解一些C++,并且我成功地将所有代码翻译成了C++,但我想尝试一下Cython,并看看它与C++和Python相比如何)。我有以下代码:
disjointset.pyx:
# distutils: language=c++
from libcpp.vector cimport vector
cdef class DisjointSet:
cpdef public vector[int] parent, rank
def __init__(self, int n):
for i in range(n):
self.parent.push_back(i)
self.rank.push_back(0)
def find(self, int v):
if v != self.parent[v]:
self.parent[v] = self.find(self.parent[v])
return self.parent[v]
setup.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("cPercolation.pyx", annotate=True)
)
我在Windows powershell中运行
python setup.py build_ext --inplace
来编译代码。但是,当我在Python中导入代码并尝试使用时,有时会出现错误(进程未返回0),有时调用find方法时会出现RecursionError。那么正确的翻译方式是什么?我已经阅读了官方文档,但对像cdef
、cpdef
这样的内容仍不确定。编辑:我添加了for循环以解决问题,但我应该如何改进cython代码?当我查看生成的html文件时,仍然有许多黄色高亮显示(Python交互)。具体而言,我想问如何使用
cdef
、cpdef
使类方法(DisjointSet.find
)更像C++代码。