C中處理Python的Numpy陣列的程式碼範例
阿新 • • 發佈:2018-12-19
今天處理Python的返回值,折騰了半天,又是連蒙帶猜,找到了辦法。為了方便大家,特別提供出來。希望給其他人帶來工作上的順利。
int fext_python_action(const ImageBuffer* pImage, DataBuffer* pOutput) { PyObject* pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 1)); PyObject* pResult = PyObject_CallObject(g_pPythonFunction_FextAction, pArgs); //開始處理返回值。具體含義看註釋。通過執行測試。 PyArrayObject* pContArray = PyArray_GETCONTIGUOUS((PyArrayObject*)pResult); float* pDataPtr = (float*)PyArray_DATA(pContArray); //陣列多少個維度? int num_dim = PyArray_NDIM(pContArray); //每個維度的長度 npy_intp* pDim = PyArray_DIMS(pContArray); //得到元素總數 int nDataCount = 1; for (int i = 0; i < num_dim; i++) { nDataCount *= pDim[i]; } GH_LOG_INFO("num_dim=%d, nDataCount=%d", num_dim, nDataCount); //輸出前4個 for (int i = 0; i < 4; i++) { GH_LOG_INFO("data[%d]=%f", i, pDataPtr[i]); } //輸出後4個 for (int i = nDataCount-4; i < nDataCount; i++) { GH_LOG_INFO("data[%d]=%f", i, pDataPtr[i]); } Py_DECREF(pContArray); Py_DECREF(pResult); Py_DECREF(pArgs); return 0; }