如何将二维数组从 C 传递到 Python
How to Pass Two-dimensional array from C to Python
我想将二维数组从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
表示 PyObject *
,而不是 s
表示字符串(如果您不想增加引用计数,则使用 N
(:
pParam = Py_BuildValue("(O)", result);
也许 boost::p ython 可以提供更简单的方法,但我自己并不了解库。
第二个循环需要从以下位置进行子磁贴更改:
for (Py_ssize_t j = 0; i < len; j++)
自
for (Py_ssize_t j = 0; j < len; j++)
使用正确的运行条件语句。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- 如何将二维数组从 C 传递到 Python