2016-01-22 111 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

相關問題