" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中使用ctypes調(diào)用C++的方法

 更新時(shí)間:2023年06月01日 11:10:49   作者:星光2020  
本文主要介紹了Python中使用ctypes調(diào)用C++的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在Python中可以通過(guò)幾種方法調(diào)用C++的函數(shù),這里介紹使用ctypes的方法。ctypes是Python自帶的一個(gè)模塊,能夠直接載入C++生成的動(dòng)態(tài)鏈接庫(kù),并調(diào)用其中的函數(shù)。示例如下

代碼文件:add.cpp

int add(int a, int b) {
    return a+b;
}

頭文件:add.h

extern "C"
int add(int a, int b);

編譯命令

$ g++ -fPIC -shared -o add.so add.cpp

在Ubuntu系統(tǒng)通過(guò)上述編譯命令生成動(dòng)態(tài)鏈接庫(kù)add.so。其中需要輸出的函數(shù)必須定義為extern "C"類型,表示函數(shù)接口以C語(yǔ)言的格式輸出。

在Python中的調(diào)用方法如下

from ctypes import *
lib = cdll.LoadLibrary('./add.so')
a = 5
b = 4
c = lib.add(a,b)
print("a + b = ", c)

這是比較簡(jiǎn)單的例子,對(duì)于使用numpy等數(shù)據(jù)類型的函數(shù)則需要更為復(fù)雜的形式,比如對(duì)于兩個(gè)數(shù)組相加的例子

代碼文件:add_arr.cpp

void add_arr(double a[10][10], double b[10][10], double c[10][10]) {
    for (int i=0; i<10; i++) {
        for (int j=0; j<10; j++) {
            c[i][j] = a[i][j] + b[i][j];
        }
    }
}

頭文件:add_arr.h

extern "C"
void add_arr(double a[10][10], double b[10][10], double c[10][10]);

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)組相加的功能

在Python文件中調(diào)用的方法

from ctypes import *
def double_ptr(arr):
? ? ptr = arr.ctypes.data_as(POINTER(c_double))
? ? return ptr
lib = cdll.LoadLibrary('./add_arr.so')
lib_add_arr = lib.add_arr
lib_add_arr.argtypes = [ ?? ?#指定函數(shù)調(diào)用的參數(shù)形式
?? ?POINTER(c_double), ?? ??? ?#ctypes定義下的指向64位浮點(diǎn)數(shù)的指針
?? ?POINTER(c_double),?
?? ?POINTER(c_double) ]
a = np.random.rand(10,10)
b = np.random.rand(10,10)
c = np.zeros([10,10])
#調(diào)用函數(shù),執(zhí)行數(shù)據(jù)的相加
lib_add_arr(double_ptr(a), double_ptr(b), double_ptr(c))
print("a = \n", a)
print("b = \n", b)
print("c = \n", c)

在Python程序中,首先指定調(diào)用函數(shù)的參數(shù)形式,通過(guò)ctypes庫(kù)可以把numpy數(shù)組以數(shù)據(jù)指針的形式傳遞給C++函數(shù),在調(diào)用函數(shù)的時(shí)候,分別把numpy數(shù)組的指針傳遞給函數(shù),即可以在C++函數(shù)中實(shí)現(xiàn)對(duì)兩個(gè)數(shù)組的相加。然后打印數(shù)據(jù)和運(yùn)算結(jié)果。

其中double_ptr是一個(gè)把numpy數(shù)組轉(zhuǎn)為指針的操作符。

到此這篇關(guān)于Python中使用ctypes調(diào)用C++的方法的文章就介紹到這了,更多相關(guān)Python ctypes調(diào)用C++內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 六個(gè)竅門助你提高Python運(yùn)行效率

    六個(gè)竅門助你提高Python運(yùn)行效率

    這篇文章主要介紹了六個(gè)竅門助你提高Python運(yùn)行效率,本文講解了關(guān)鍵代碼使用外部功能包、在排序時(shí)使用鍵、針對(duì)循環(huán)的優(yōu)化、使用較新的Python版本等優(yōu)化竅門,需要的朋友可以參考下
    2015-06-06
  • 一文詳解Python中pip安裝的提速全攻略

    一文詳解Python中pip安裝的提速全攻略

    在Python開(kāi)發(fā)過(guò)程中,使用pip安裝第三方包是最常見(jiàn)的操作之一,本文將為你詳細(xì)介紹多種有效的pip安裝提速方法,大家可以根據(jù)需要進(jìn)行選擇
    2025-08-08
  • Pandas中的日期時(shí)間date處理小結(jié)

    Pandas中的日期時(shí)間date處理小結(jié)

    Pandas提供了強(qiáng)大的日期和時(shí)間處理功能,本文主要介紹了Pandas中的日期時(shí)間date處理小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • python中退出多層循環(huán)的方法

    python中退出多層循環(huán)的方法

    這篇文章主要介紹了python中退出多層循環(huán)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 基于Python實(shí)現(xiàn)溫度單位轉(zhuǎn)換器(新手版)

    基于Python實(shí)現(xiàn)溫度單位轉(zhuǎn)換器(新手版)

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)溫度單位轉(zhuǎn)換器,主要是將攝氏溫度(C)和華氏溫度(F)相互轉(zhuǎn)換,下面小編就來(lái)和大家簡(jiǎn)單介紹一下吧
    2025-08-08
  • python 迭代器和iter()函數(shù)詳解及實(shí)例

    python 迭代器和iter()函數(shù)詳解及實(shí)例

    這篇文章主要介紹了python 迭代器和iter()函數(shù)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Python中shutil模塊的學(xué)習(xí)筆記教程

    Python中shutil模塊的學(xué)習(xí)筆記教程

    shutil模塊是一種高層次的文件操作工具,類似于高級(jí)API,主要強(qiáng)大之處在于其對(duì)文件的復(fù)制與刪除操作更是比較支持好。下面這篇文章主要介紹了Python中shutil模塊的相關(guān)教程,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-04-04
  • Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    Python學(xué)習(xí)筆記(二)基礎(chǔ)語(yǔ)法

    對(duì)于任何一門語(yǔ)言的學(xué)習(xí),學(xué)語(yǔ)法是最枯燥無(wú)味的,但又不得不學(xué),基礎(chǔ)概念較繁瑣,本文將不多涉及概念解釋,用例子進(jìn)行相關(guān)解析,適當(dāng)與C語(yǔ)言對(duì)比,避免陷入語(yǔ)法的苦海。我認(rèn)為初學(xué)者學(xué)習(xí)語(yǔ)法的目標(biāo)是學(xué)會(huì)使用即可,關(guān)于對(duì)概念的深入理解,剖析,沒(méi)有一定的知識(shí)積累是很難做到的。
    2014-06-06
  • python3如何使用saml2.0協(xié)議接入SSO

    python3如何使用saml2.0協(xié)議接入SSO

    SAML是一種用于在不同系統(tǒng)之間傳輸安全聲明的XML框架,通過(guò)IDP和SP之間的重定向訪問(wèn),SP向IDP請(qǐng)求用戶身份認(rèn)證,IDP驗(yàn)證用戶身份后返回SAML應(yīng)答,本文以python3和python3-saml庫(kù)為例,介紹了如何接入公司SSO系統(tǒng),包括配置和處理登錄和登出請(qǐng)求
    2024-11-11
  • python 實(shí)現(xiàn)登錄網(wǎng)頁(yè)的操作方法

    python 實(shí)現(xiàn)登錄網(wǎng)頁(yè)的操作方法

    今天小編就為大家分享一篇python 實(shí)現(xiàn)登錄網(wǎng)頁(yè)的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

陆良县| 沐川县| 哈尔滨市| 鸡西市| 白河县| 三台县| 突泉县| 土默特右旗| 天等县| 青岛市| 旬邑县| 庐江县| 盐池县| 新津县| 静宁县| 奉贤区| 济阳县| 大悟县| 武隆县| 丹巴县| 嘉定区| 旬邑县| 井陉县| 上虞市| 九龙城区| 安义县| 浙江省| 邮箱| 县级市| 乡城县| 津市市| 土默特左旗| 友谊县| 岳阳县| 通海县| 大城县| 五指山市| 故城县| 盘山县| 桐城市| 马山县|