cython传递指向扩展类型构造函数的指针

时间:2016-01-22 16:32:44

标签: python cython

我使用数组和浮点数定义了扩展类型。但是当我尝试编译它时会出错:无法将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

1 个答案:

答案 0 :(得分:0)

我认为不允许使用C数组,tuplelist可能会有效。

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));