C中处理Python的Numpy数组的代码范例
今天处理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;
}
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);
}
//输出后4个
for (int i = nDataCount-4; i < nDataCount; i++)
{
GH_LOG_INFO("data[%d]=%f", i, pDataPtr);
}
Py_DECREF(pContArray);
Py_DECREF(pResult);
Py_DECREF(pArgs);
return 0;
}
文档来源:51CTO技术博客https://blog.51cto.com/u_13161667/3296281
页:
[1]