python中调用C++函数
python中調用C++函數(shù)
- 無參調用
- 單變量傳入與返回調用
- numpy數(shù)組傳入與返回調用
- c++類調用
- 用python寫不香嗎?還這么復雜調用C++?
一、 無參調用
在python中調用無參數(shù)和無返回的C++函數(shù),具體的使用方式如下:
C++API函數(shù)的編寫形式:
將編寫的.cpp文件生成.so動態(tài)鏈接庫在ubuntu命令行中執(zhí)行如下命令:
g++ -o xxx.os -shared -fPIC xxx.cpp在相應的文件下就可看到生成的xxx.so文件。
python調用生成的動態(tài)鏈接庫:
運行python文件得到如下結果:
二、單變量傳入與返回調用
在C++函數(shù)中需要python程序傳入一個單變量的參數(shù),整形,浮點型或者字符型。其中對應關系如下:
C++的程序如下:
對用python的程序為:
import ctypesdll = ctypes.cdll.LoadLibrary('./doc.so') a = 23 a2 = dll.hehe(a) print(a2)運行結果:
三、numpy數(shù)組傳入與返回調用
對于numpy數(shù)組傳入C++函數(shù)與之前的但變量傳入大不相同:
1、首先對numpy數(shù)組處理得到存儲位置的指針(切記numpy數(shù)組內存一定要連續(xù))
2、將得到的指針傳遞給對應的C++函數(shù)。
在這個過程中,會有一個問題出現(xiàn),比如numpy數(shù)組為一個二維的矩陣,但C++得到參數(shù)只是一個指針,所以我們要有一個計算。將多維空間中的位置坐標轉換為一維中的指針下標:舉例如下:
假設有一個多維的矩陣MxNxH,轉換為內存中的實際存儲順序為第一行第一列的H個元素-第一行第二列的H個元素。。。依次類推
3、對于傳入指針的返回,因為傳入的是實際物理地址,所以在C++函數(shù)中對數(shù)據(jù)的改變,在python對應的也會發(fā)生相應的改變。
具體C++程序為:
與之相對應的python文件為:
import ctypes import numpy as npdll = ctypes.cdll.LoadLibrary('./doc.so') a = np.array([[1,2,3],[2,3,4],[3,4,5]],dtype=np.int32) p = a.ctypes.data_as(ctypes.POINTER(ctypes.c_int32)) print(a) dll.hehe(p,3,3) print(a)運行python文件得到的結果為:
四、numpy數(shù)組傳入與返回調用
class test{public:void test(void); };extern "C"{test t;void test(void){t.test();} } void test::test(void) {cout << "hello world!" << endl; }用python寫不香嗎?還這么復雜調用C++?
別的方面具體不不清楚兩者的區(qū)別,但是就從處理速度來說,我做了一個小實驗,相信看完之后就沒有類似的疑問了。實驗的內容為:對于一個512x512x10全一矩陣執(zhí)行所有元素加1操作,分別用python和C++來執(zhí)行,看需要的時間。
具體的代碼:
運行結果(睜大眼睛看清楚喲):
總結
以上是生活随笔為你收集整理的python中调用C++函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: infor wms 项目启动_派诺科技数
- 下一篇: C++ OJ在线编程常见输入输出技巧与示