2016-07-28 36 views
0

創建numpy的NDArray我嘗試做一個Python包裝一些C++函數和類型綁定到Python。我的問題是當我嘗試將自定義矩陣類型轉換爲numpy ndarray。最有說服力的解決方案是使用PyArray_SimpleNewFromData問題從PyArray_SimpleNewFromData

爲了測試它的行爲,因爲我沒做什麼,我想我試圖執行一個簡單的測試:

PyObject* ConvertToPython(...) { 
    uint8_t test[10] = {12, 15, 82, 254, 10, 32, 0, 8, 127, 54}; 
    int32_t ndims = 1; 
    npy_intp dims[1]; 
    dims[0] = 10; 
    int32_t typenum = (int32_t)NPY_UBYTE; 
    PyObject* python_object = PyArray_SimpleNewFromData(ndims, dims, typenum, (void*)test); 
    Py_XINCREF(python_object); 
    return python_object; 
} 

然後我在Python得到以下結果:

type(test) = <type 'numpy.ndarray'> 
test.ndim = 1 
test.dtype = uint8 
test.shape = (10,) 

但數組中的值是:

test.values = [ 1 0 0 0 0 0 0 0 80 8] 

我想不通,我究竟做錯了什麼?我不是很有經驗做一個Python包裝,所以任何幫助都是可觀的!

回答

2

我會嘗試與已通過的malloc分配,然後陣列也許設置一些命名OWNDATA標誌,以避免內存泄漏。

至少垃圾數據可以解釋如果numpy.ndarray實例不復制數據,但只存儲一個指針提供的數組。函數返回後,一個指向堆棧分配數組的指針指向內存,任何時候堆棧都會改變。

+0

是的,它運作得更好! – baptiste