国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python的C/C++擴(kuò)展——用SWIG封裝C++為Python模塊

鄒強(qiáng) / 679人閱讀

摘要:所以,最大的好處就是將腳本語言的開發(fā)效率和的運(yùn)行效率有機(jī)的結(jié)合起來。前面的文章提到一個實(shí)現(xiàn)的雙數(shù)組的實(shí)現(xiàn),它在中文分詞新詞發(fā)現(xiàn)等算法中的應(yīng)用。本文以的封裝實(shí)現(xiàn)來說明的使用。編譯生成動態(tài)庫編譯生成的使用的,可以參考的編寫。

如果覺得文章對你有幫助,你也可以訪問老猿的個人博客https://www.yuanrenxue.com/

Python調(diào)用C/C++代碼的利器除了boost_python外,還有SWIG(Simplified Wrapper and Interface Generator),它是用來為腳本語言調(diào)用C和C++程序的軟件開發(fā)工具,它實(shí)際上是一個編譯器,獲取C/C++的聲明和定義,用一個殼封裝起來,以便其它腳本語言訪問這些聲明。所以,SWIG 最大的好處就是將腳本語言的開發(fā)效率和 C/C++ 的運(yùn)行效率有機(jī)的結(jié)合起來。

前面的文章提到一個C++實(shí)現(xiàn)的雙數(shù)組Trie Tree的實(shí)現(xiàn):cedar,它在中文分詞、新詞發(fā)現(xiàn)等算法中的應(yīng)用。本文以cedar的SWIG封裝實(shí)現(xiàn)來說明SWIG的使用。

0. 安裝swig

工欲善其事必先利其器,首先要安裝swig,Ubuntu安裝swig很簡單:

sudo aptitude install swig

1. 聲明和定義C/C++代碼

在cedar的swig目錄下面有cedar的C++聲明和實(shí)現(xiàn)代碼trie.h,但是這個實(shí)現(xiàn)里面沒有遍歷所有key的函數(shù)方法,所以我添加了一個實(shí)現(xiàn),首先定義一個數(shù)據(jù)結(jié)構(gòu)來定義key:

// key-value pair return type for next_key()
class kv_t {
    public:
        std::string key;
        int value;
};

添加一個函數(shù)每次返回一個key,當(dāng)key字符串為空時表示遍歷結(jié)束,繼續(xù)調(diào)用的話就又從頭開始遍歷:

  // to iterate all keys
  kv_t next_key() const {
    static size_t from = 0, p = 0;
    union { int i; int x; } b;
    char key[256] = {0};
    kv_t kv;
    if(from == 0) {
        b.i = _t->begin(from, p);
    }else{
        b.i = _t->next(from, p);
    }
   if (b.i == trie_t::CEDAR_NO_PATH) {
        kv.key = "";
        kv.value = 0;
        from = 0;
        p = 0;
        return kv;
    }
    _t->suffix(key, p, from);
    kv.key = key;
    kv.value = b.x;
    return kv;
  }

2. 編寫接口文件.i

查看cedar.i可以看到SWIG的接口文件的編寫規(guī)則:

首先在 %module 后面聲明模塊名稱,這就是Python在import時使用的模塊名稱;
在%{ … %}之間包含相關(guān)頭文件
在%include 后面可以聲明對STL的支持
最后聲明要封裝的函數(shù)和變量,也可以之間包含頭文件: %include “trie.h”

3. 封裝代碼

可以在Makefile里面看到python-bindings:

python-bindings: 
        swig -Wall -python -builtin -outdir python -c++ cedar.i
        mv -f cedar_wrap.cxx python

直接make或者多帶帶運(yùn)行上面的swig命令,就可以生成cedar.py和cedar_wrap.cxx文件。

4. 編譯生成動態(tài)庫

編譯生成的cedar_wrap.cxx使用python distutils的setup,可以參考python/setup.py的編寫。setup.py的build如下:

python setup.py build

就會在當(dāng)前目錄下面創(chuàng)建目錄build,下面生成lib.linux-x86_64-2.7/cedar.py 和 _cedar.so

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43421.html

相關(guān)文章

  • SWIGC++ 庫進(jìn)行 Python 包裝

    摘要:可以在接口文件中直接引用庫里的內(nèi)容,大大方便接口文件的編寫。使用庫里的這里先介紹方式通過創(chuàng)建出來的數(shù)組是數(shù)組的直接代理,非常底層和高效,但是,它也和數(shù)組一樣不安全,一樣沒有邊界檢查。對由于這種情況,可以使用庫里的。 如果你也像我們一樣,同時使用Python和C++,以獲得兩種語言的優(yōu)勢,一定也會希望尋找一種好的方式集成這兩種語言,相比而言,讓Python能夠方便使用C++的庫更加重要,...

    jas0n 評論0 收藏0
  • Python調(diào)C/C++方式

    摘要:調(diào)用方式方式一基礎(chǔ)篇這種方法叫做的擴(kuò)展使用這樣調(diào)用引用的頭文件包裹函數(shù),用來包裹需要轉(zhuǎn)化為的函數(shù),在方法前面加下劃線。定義名稱通常和文件名保持一致。執(zhí)行命令在下,使用編譯器生成對應(yīng)的文件。 Python調(diào)用C++方式 方式一(基礎(chǔ)篇) 這種方法叫做python的擴(kuò)展 int great_function(int a) { return a + 1; } 使用python這樣調(diào)用...

    PiscesYE 評論0 收藏0
  • Tensorflow代碼解析(二)

    摘要:為了進(jìn)一步了解的邏輯,圖對和進(jìn)行了展開分析。另外,在命名空間中還隱式聲明了控制依賴操作,這在章節(jié)控制流中相關(guān)說明。簡述是高效易用的開源庫,有效支持線性代數(shù),矩陣和矢量運(yùn)算,數(shù)值分析及其相關(guān)的算法。返回其中一塊給用戶,并將該內(nèi)存塊標(biāo)識為占用。 3. TF 代碼分析初步3.1 TF總體概述為了對TF有整體描述,本章節(jié)將選取TF白皮書[1]中的示例展開說明,如圖 3 1所示是一個簡單線性模型的TF...

    zhigoo 評論0 收藏0
  • 深度學(xué)習(xí):你該知道八大開源框架

    摘要:作為當(dāng)下最熱門的話題,等巨頭都圍繞深度學(xué)習(xí)重點(diǎn)投資了一系列新興項(xiàng)目,他們也一直在支持一些開源深度學(xué)習(xí)框架。八來自一個日本的深度學(xué)習(xí)創(chuàng)業(yè)公司,今年月發(fā)布的一個框架。 深度學(xué)習(xí)(Deep Learning)是機(jī)器學(xué)習(xí)中一種基于對數(shù)據(jù)進(jìn)行表征學(xué)習(xí)的方法,深度學(xué)習(xí)的好處是用 非 監(jiān)督式或半監(jiān)督式 的特征學(xué)習(xí)、分層特征提取高效算法來替代手工獲取特征(feature)。作為當(dāng)下最熱門的話題,Google...

    Rindia 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<