我在C++中編寫了一個python擴展來處理numpy數組。 我有內存問題。Python/Numpy C++擴展:內存問題
在調用擴展之前,我有一個值大於0的3D numpy數組。 一旦我在延長我得到使用該功能的numpy的數組:
PyArrayObject * myArray = NULL;
if (!PyArg_ParseTuple(args, "O!",
&PyArray_Type,&myArray)) return NULL;
使用應借參考蟒蛇所以,我直接進入我的numpy的陣列「啊!」。
然後我訪問數據:
float * myData = (float *) myArray->data;
int nbFrames = array -> dimensions[0];
int nbRows = array -> dimensions[1];
int nbCols = array -> dimensions[2];
後來我檢查,存在於myArray的值仍然爲正:
for(int i = 0 ; i < nbFrames; i ++){
for(int j = 0 ; j < nbRows; j ++){
for(int k = 0 ; k < nbCols; k++){
if(myData[ i * nbCols * nbRows + j * nbCols + k ] < 0){
perror("Value < 0\n");
exit(1);
}
}
}
}
每次我碰到的情況時,該值爲< 0這不僅僅是「-0.0000」,而是「-19.73」。
那麼,有沒有人遇到過這種問題,或者沒有人知道它來自哪裏以及如何解決它?
你確保numpy的陣列是連續的? print arr.flags ['C_CONTIGUOUS']另外,您確定您的numpy數組的每個值的位數與您的浮點數相同嗎? – 2013-05-06 11:01:36
完美!非常感謝你!!那實際上是問題所在。我的數組不是C連續的。這是'對齊'。 – user1314776 2013-05-06 12:04:10