簡體   English   中英

如何將二維數組從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])

然后你可以像使用字符串一樣構建你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM