如何将二维数组从C传递给Python

时间:2015-05-19 15:45:43

标签: python c++ c

我想将二维数组从C传递给python。

如何使用PyEval_CallObject()pModule = PyImport_ImportModule("python_code"); pFunc = PyObject_GetAttrString(pModule, "main"); pParam = Py_BuildValue("(s)", "HEHEHE"); pResult = PyEval_CallObject(pFunc,pParam);

例如,我可以使用以下代码将字符串从C传递给python:

{{1}}

现在,我想将二维数组和字符串传递给python

2 个答案:

答案 0 :(得分:2)

基本上,你想要构建一个元组,而不是解析一个。

这只是一个简单的示例,说明如何将arr转换为元组元组。在这里你应该在某个时间点添加一些错误检查。

Py_ssize_t len = arr.size();
PyObject *result = PyTuple_New(len);
for (Py_ssize_t i = 0; i < len; i++) {
    Py_ssize_t len = arr[i].size();
    PyObject *item = PyTuple_New(len);
    for (Py_ssize_t j = 0; i < len; j++)
        PyTuple_SET_ITEM(item, j, PyInt_FromLong(arr[i][j]));
    PyTuple_SET_ITEM(result, i, item);
}

然后你可以像使用字符串一样构建你的args。您可以使用s代替O代替PyObject *N,如果您不想增加引用次数):

pParam = Py_BuildValue("(O)", result);

也许boost::python可以提供更简单的方法,但我自己并不真正了解这个库。

答案 1 :(得分:0)

第二个循环需要从以下方面进行微妙的改变:

for (Py_ssize_t j = 0; i < len; j++)

for (Py_ssize_t j = 0; j < len; j++)

使用正确的运行条件声明。