[問題] 如何呼叫c++函式並傳入、回傳numpy array

看板Python作者 (笨小孩)時間8年前 (2018/01/16 15:41), 編輯推噓0(0011)
留言11則, 4人參與, 8年前最新討論串1/1
環境: OS:win10 ubuntu16 Version: python 3.5 up Lib: CUDA 問題描述: 需要用CUDA來加速,查了一下python call c++的方法主要有以下5種: 1. Extending Python with C or C++ 2. SWIG 3. ctypes 4. Cython 5. cffi 為了可攜性與實現難易度,打算選ctype (不知道有沒有錯....感覺只需要載入.dll or .so很方便) 問題: 1. 要如何從python 餵numpy array給c++檔案並且一樣回傳numpy array呢? 2. 有用到CUDA應該不需要在python code特別處裡吧? 以上 還請各位大大指教>.< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.230.27 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1516088514.A.11B.html

01/16 16:36, 8年前 , 1F
ctypes 和 CFFI 都只能針對 C 喔, C++ 雖然理論上可以但
01/16 16:36, 1F

01/16 16:37, 8年前 , 2F
會處理 name mangling 到瘋掉; 看你的狀況或許可以考慮
01/16 16:37, 2F

01/16 16:37, 8年前 , 3F
Boost-Python
01/16 16:37, 3F

01/16 21:46, 8年前 , 4F
樓上說的 ctypes 問題,用 extern "C" 包可以解決
01/16 21:46, 4F

01/16 21:46, 8年前 , 5F
至於 numpy,C API 的文件很少,要查一陣子
01/16 21:46, 5F

01/16 21:47, 8年前 , 6F
光是 linker, header 要用哪些就很難找了
01/16 21:47, 6F

01/16 23:33, 8年前 , 7F
如果是已有的 C++ lib 這樣做就會需要維護兩份 API 定義
01/16 23:33, 7F

01/16 23:33, 8年前 , 8F
(extern C 一個, ctypes 那邊一個) 會稍微麻煩, 如果可
01/16 23:33, 8F

01/16 23:34, 8年前 , 9F
以這樣做的話 CFFI 只要一份定義維護起來會方便一點
01/16 23:34, 9F

01/17 17:25, 8年前 , 10F
感謝各位解惑 我會嘗試看看cffi 希望直接吃numpy最好
01/17 17:25, 10F

01/19 21:50, 8年前 , 11F
Pytorch tensor 很像 numpy 而且支持 cuda 加速
01/19 21:50, 11F
文章代碼(AID): #1QNQp24R (Python)
文章代碼(AID): #1QNQp24R (Python)