cython 将指针传递给扩展类型的构造函数
cython pass pointer to constructor of extension types
我用一个数组和一个浮点数定义了一个扩展类型。但是当我尝试编译它时出错了:无法将 Python 对象参数转换为类型 'float *'。似乎我无法将指针传递给构造函数。有什么解决办法可以避免这个问题吗?
cdef class Particle(object):
cdef float pos[3]
cdef float D
def __init__(self,float pos[3],float D):
self.pos=pos
self.D=D
我认为那里不允许使用 C 数组,tuple
或 list
可能有效。
cdef class Particle(object):
cdef float pos[3]
cdef float D
def __init__(self, tuple pos, float D):
self.pos = pos
self.D = D
cython 生成的代码看起来很合理,
if (unlikely(__Pyx_carray_from_py_float(__pyx_v_pos, __pyx_t_1, 3) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
memcpy(&(__pyx_v_self->pos[0]), __pyx_t_1, sizeof(__pyx_v_self->pos[0]) * (3));
我用一个数组和一个浮点数定义了一个扩展类型。但是当我尝试编译它时出错了:无法将 Python 对象参数转换为类型 'float *'。似乎我无法将指针传递给构造函数。有什么解决办法可以避免这个问题吗?
cdef class Particle(object):
cdef float pos[3]
cdef float D
def __init__(self,float pos[3],float D):
self.pos=pos
self.D=D
我认为那里不允许使用 C 数组,tuple
或 list
可能有效。
cdef class Particle(object):
cdef float pos[3]
cdef float D
def __init__(self, tuple pos, float D):
self.pos = pos
self.D = D
cython 生成的代码看起来很合理,
if (unlikely(__Pyx_carray_from_py_float(__pyx_v_pos, __pyx_t_1, 3) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
memcpy(&(__pyx_v_self->pos[0]), __pyx_t_1, sizeof(__pyx_v_self->pos[0]) * (3));