[英]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])
)
然后你可以像使用字符串一樣構建你的args。 您可以使用O
代替PyObject *
(如果您不想增加引用計數,則使用N
,而不是s
代表字符串:
pParam = Py_BuildValue("(O)", result);
也許boost :: python可以提供一個更簡單的方法,但我自己並不真正了解這個庫。
第二個循環需要從以下方面改變:
for (Py_ssize_t j = 0; i < len; j++)
至
for (Py_ssize_t j = 0; j < len; j++)
有正確的運行條件聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.