2016-01-22 112 views
1

我用数组和浮点数定义了一个扩展类型。但是,当我尝试编译它时出错:无法将Python对象参数转换为类型'float *'。看来我无法传递一个指向构造函数的指针。有没有解决方案可以避免这个问题?cython传递指向扩展类型构造函数的指针

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 

回答

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

所以,用Cython只允许Python和基本C数据类型将被传递到构造器不是指针。谢谢 – alf

相关问题