gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:37 25 4
gpt4 key购买 nike

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

如何使用 Py_BuildValue()PyEval_CallObject()

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

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

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

最佳答案

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

这只是一个简单的示例,说明如何将 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; j < len; j++)
PyTuple_SET_ITEM(item, j, PyInt_FromLong(arr[i][j]));
PyTuple_SET_ITEM(result, i, item);
}

(对于 Python 3 C API,将 PyInt_FromLong(arr[i][j]) 替换为 PyLong_FromLong(arr[i][j]))

然后您可以构建您的参数,就像您对字符串所做的那样。对于字符串,您可以使用 O 而不是 s 来表示 PyObject *(或者如果您不想使用 N增加引用计数):

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

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

关于python - 如何将二维数组从 C 传递给 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com