Cython 问题,无法对 class 变量使用 cdef
Cython problem, can't use cdef on class variables
我正在尝试使用 Cython 将 python class 转换为 C 以提高时间复杂度。我最常用的变量是 init 方法中定义的 class 变量,因此我想将它们定义为 cdef double。我已经尝试了所有我能找到的东西,但没有什么让我转换代码。似乎应该这样做:
class Wall(object):
cdef double min_x, max_x, a, b, c
def __init__(self, start, stop):
self.min_x = min(start[0], stop[0])
self.max_x = max(start[0], stop[0])
self.a = (stop[1]-start[1])/(stop[0]-start[0])
self.b = -1
self.c = start[1]-self.a*start[0]
但是我收到以下错误:
Error compiling Cython file:
------------------------------------------------------------
...
class Wall(object):
cdef double min_x, max_x, a, b, c
^
------------------------------------------------------------
wall_class_cy.pyx:9:9: cdef statement not allowed here
我做错了什么?
亲切的问候,雅各布
您需要创建 class 变量 public 并为 class 提供 C 声明。试试这个:
cdef class Wall(object):
cdef public double min_x, max_x, a, b, c
def __init__(self, start, loop):
...
我正在尝试使用 Cython 将 python class 转换为 C 以提高时间复杂度。我最常用的变量是 init 方法中定义的 class 变量,因此我想将它们定义为 cdef double。我已经尝试了所有我能找到的东西,但没有什么让我转换代码。似乎应该这样做:
class Wall(object):
cdef double min_x, max_x, a, b, c
def __init__(self, start, stop):
self.min_x = min(start[0], stop[0])
self.max_x = max(start[0], stop[0])
self.a = (stop[1]-start[1])/(stop[0]-start[0])
self.b = -1
self.c = start[1]-self.a*start[0]
但是我收到以下错误:
Error compiling Cython file: ------------------------------------------------------------ ... class Wall(object): cdef double min_x, max_x, a, b, c ^ ------------------------------------------------------------ wall_class_cy.pyx:9:9: cdef statement not allowed here
我做错了什么?
亲切的问候,雅各布
您需要创建 class 变量 public 并为 class 提供 C 声明。试试这个:
cdef class Wall(object):
cdef public double min_x, max_x, a, b, c
def __init__(self, start, loop):
...