c調用python第三方庫_Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞...

在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態鏈接庫DLL文件中的函數,在提高軟件運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟件的功能及應用領域,減少重復編寫代碼、重復造輪子的工作量,這也充分體現了Python語言作為一種膠水語言所特有的優勢。

前面兩篇已經講了傳遞數值/指針/字符串參數、傳遞結構體參數的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數

這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。一般情況下,DLL函數中傳遞C語言類型的數組,在接收到Python語言中時,通常將其轉換為numpy庫里面的數組類型,這樣做的好處是可以借助于numpy強大的分析處理功能對數據直接作后續處理。這次通過例子演示下C語言數組到numpy數組之間是怎樣傳遞的。

同樣,操作系統環境是win7 64位,Python使用的版本是python2.7.14,函數約定的調用方式為C調用(cdecl)方式。

例子說明

在DLL文件中設計一個函數GenSine,其功能是根據給定的參數(包括數據點數N、信號頻率f、采樣頻率Fs、信號幅值A、初始相位initPhase、偏移offset等參數)產生一個正弦波形數據,返回時間向量數組x(橫坐標數據)和波形數據y(縱坐標數據)。該函數的聲明如下圖所示:

u=2030289650,3561565657&fm=173&app=25&f=JPEG?w=640&h=64

函數GenSine的具體C語言實現代碼如下:

u=3899120537,628216163&fm=173&app=25&f=JPEG?w=640&h=230&s=BA83E54C0FA1916846E96D0F000070C1

下面給出兩種Python中轉為numpy數組的調用方法。

Python中調用方法1

在Python中的調用方式如下:

u=90046969,1382210802&fm=173&app=25&f=JPEG?w=640&h=100

上面的代碼中在聲明函數的參數類型時,對于前兩個參數x和y數組變量,將其聲明為指向double類型的指針即可。在調用該函數時,先聲明兩個numpy庫中的數組t1、y1,數據類型為float64,將其作為參數傳遞到該函數中時,使用的是numpy中的ctypes.data_as(POINT(c_double))轉化為C語言中的指向double類型的指針類型,這樣就可以實現numpy中數組與C語言數組中的完美轉換。

Python中調用方法2

在Python中的調用方式如下:

u=3325507686,965205689&fm=173&app=25&f=JPEG?w=640&h=100

與第1種方法不同的是,這種方法在聲明函數的參數類型時,對于前兩個參數x和y數組變量,使用np.ctypeslib.ndpointer(dtype=np.float64,ndim=1,flags="C_CONTIGUOUS")直接將numpy中的數組聲明為C語言中的數組類型,最后調用時,直接將將numpy中的數組類型t2和y2傳到該函數中即可。相比于第1種方法,雖然在聲明時麻煩些,但在調用時可以直接使用numpy中的數組類型,相對來說要簡潔些,畢竟函數聲明只需聲明一次即可,但調用函數可能會在程序中出現多次。

完整的測試代碼

在測試程序中,使用了pyqtgraph庫畫兩種方法產生的正弦波形圖,不明白的可以翻看下前面的文章,專門介紹了該庫的畫圖方法。詳細可參考:Python使用pyqtgraph庫實現數據可視化之多條曲線繪制方法

完整的測試代碼如下圖所示:

u=535072106,1115609313&fm=173&app=25&f=JPEG?w=640&h=436&s=B29131C8CAA5B16C18D5C50F0000F0C3

運行結果如下圖所示:

u=1507132149,2670665772&fm=173&app=25&f=JPEG?w=639&h=439&s=41459B42FBFCBE495C59DC1F000070C9

從運行結果可以看出,兩種調用方法,都可以實現C語言數組與numpy數組之間數據正確的傳遞。相比來說,第2種方法更簡潔些。

歡迎加關注,共同交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

妲己機器人怎么升級固件_臺灣重金設計的3D妲己,亮瞎了

大家還記得前幾天米醋分享的國內首檔二次元選秀,遭網友瘋狂吐槽:不知道怎么形容的丑!當米醋看到了這檔綜藝的宣傳海報時瞬間被這一批選手的顏值所吸引!太魔幻了!沒成想看到3D人物效果時米醋卻被這盛世丑顏丑到裂開&…

go語言通道插入0_Go語言入門必知教程-通道

Golang提供了一種稱為通道的機制,用于在協程之間共享數據。當函數作為協程執行并發活動時,需要它們共享資源或數據,通道便充當協程之間的管道(管道),提供一種確保同步交換數據的機制。需要在聲明通道時指定數據類型,可…

aes加密字符串c++_springboot2.2.X手冊:防抓包?快速實現API接口數據加密

溪云閣:專注編程教學,架構,JAVA,Python,微服務,機器學習等,歡迎關注上一篇:springboot2.2.X手冊:redis的7種類型100個方法全解析有沒有遇到這樣子的接口,放到…

鴻蒙系統打造完備終端,搭載鴻蒙系統的手機很快推出,華為生態更加完善

2019年的8月9日,在華為開發者大會上華為向大家正式的發布了一款操作系統——鴻蒙系統。這個系統備受大家的關注,鴻蒙2.0的發布也在時刻期待中。因為在目前的操作系統中,華為的鴻蒙操作系統是僅次于安卓、ios的存在,而今日&#xf…

curl socket 訪問_使用Curl、socket、file_get_contents三種方法POST提交數據 | 學步園

# <?php # /**# * Socket版本# * 使用方法&#xff1a;# * $post_string "appsocket&versionbeta";# * request_by_socket(facebook.cn,/restServer.php,$post_string);# */# function request_by_socket($remote_server,$remote_path,$post_string,$port …

html 標簽 r語言,從R中的字符串中刪除html標簽

我正在嘗試將網頁源代碼讀入R并將其作為字符串處理。我正在嘗試刪除段落并從段落文本中刪除html標簽。我遇到了以下問題&#xff1a;我嘗試實現一個功能來刪除html標簽&#xff1a;cleanFunfunction(fullStr){#find location of tags and citationstagLoccbind(str_locate_all(…

python給圖片加半透明水印_Python 批量加水印就這么簡單!

工作的時候&#xff0c;尤其是自媒體&#xff0c;我們必備水印添加工具以保護我們的知識產權,網上有許多的在線/下載的水印添加工具&#xff0c;但他們或多或少都存在以下問題&#xff1a; 在線工具需要將圖片上傳到對方服務器&#xff0c;信息不安全。 很多工具不具備批量處理…

html 選中狀態,html默認選中狀態

html中標簽用法解析及如何設置selec標簽定義和用法 select 元素可創建單選或多選菜單。當提交表單時&#xff0c;瀏覽器會提交選定的項目&#xff0c;或者收集用逗號分隔的多個選項&#xff0c;將其合成一個單獨的參數列表&#xff0c;并且在將 表單數據提交給服務器時包括 nam…

nemesis什么車_nemesis是什么意思_nemesis的翻譯_音標_讀音_用法_例句_愛詞霸在線詞典...

全部報應Was he aiming at Bryant, his old nemesis and a favorite target in the past?他是不是暗指科比, 一直的“競爭對手”和過去最中意的目標?期刊摘選After the defeat of their old arch nemesis, the Turtle have grown apart as a family.在擊敗舊時強敵后, 忍者神…

wxpython制作表格界面_[Python] wxPython 菜單欄控件學習總結(原創)

1、總結 1、大體創建過程 1、創建一個 菜單欄 : menuBar wx.MenuBar()相當于這個白色地方&#xff0c;沒有File這個菜單 2、創建 菜單 : fileMenu wx.Menu()這兩個不是直接“用的”&#xff0c;叫菜單。既用來分類其他 菜單項 的文件夾樣 3、創建 菜單項 : newItem wx.MenuI…

android 8三星note8,信息太多很煩瑣?告訴你三星Note8有妙招

不知從何時開始&#xff0c;我們眼前的信息變得豐富而繁雜。簡潔的新聞無需經過報紙過濾&#xff0c;發生數分鐘已經城皆知。預測晴雨也無需依靠天氣先生&#xff0c;點亮手機即可洞悉風雨。生活在信息時代的我們僅用幾英寸的窗口觀察世界&#xff0c;信息的洪流難免會遮蔽眼前…

realloc函_realloc(重新分配內存空間的函數)

在頭文件中定義void * realloc(void * ptr&#xff0c;size_t new_size);重新分配給定的內存區域。它必須預先分配malloc()&#xff0c;calloc()或realloc()尚未釋放與free或呼叫realloc。否則&#xff0c;結果是不確定的。重新分配由以下兩者之一完成&#xff1a;a)ptr如有可能…

python做excel表格教程視頻_基于Python實現excel表格讀寫

首先安裝對應的xlrd和xlwt 打開cmd命令窗口輸入pip install xlrd和pip install xlwt就可以安裝。之后輸入pip list檢查是否成功配置&#xff1a;xlrd操作# 接下來就是常用的語法操作&#xff1a; excel_data xlrd.open_workbook(文件路徑)#得到對應的工作表 sheet excel_data…

虛無鴻蒙哪個厲害,【圖說鴻蒙】鴻蒙設定之七柱神(五)

原標題&#xff1a;【圖說鴻蒙】鴻蒙設定之七柱神(五)七柱神玄冥神飛來流去本無心&#xff0c;無空無我混天塵。幻作人形深簡出&#xff0c;不是老嫗是海神。玄冥神 虛無荒海司掌海洋、流動之力 神威之色為藍執掌海洋、流動之力的神&#xff0c;是神道“熵”的最高掌控者&#…

java lambda 排序_Java8特性:Lambda表達式之概念篇

Java自誕生已經有十幾個年頭了&#xff0c;目前也已經發布了第十三個大版本&#xff0c;其中Java8是常用的版本中最新的一個版本。而Java8最大的特性就是&#xff1a;Lambda表達式、函數式接口和Stream流。本篇我只介紹Lamda表達式的概念以及簡單使用&#xff0c;至于別的我打算…

jq獲取表格里的checkbox_Python抓取網頁表格(一)

Python有很多包可以抓取數據&#xff0c;如selenium、requests、scrapy、pandas&#xff0c;每個包都有其適用性&#xff0c;個人認為在抓取數據時&#xff0c;代碼簡潔性和數據獲取的準確性是需要考慮的因素&#xff0c;時間快慢倒不用太在意&#xff0c;畢竟用python抓數據本…

html一個空格多少像素,一個空格占幾個字符?

一個空格通常占2個字符&#xff0c;但有些特殊情況占用3個字符。在程序中&#xff0c;空格占用的字符數取決于程序使用的字符集&#xff0c;如&#xff1a;1、使用多字節字符集時&#xff0c;半角空格占用1個字節&#xff0c;全角空格占用2個字節。2、使用Unicode字符集時&…

各種摳圖動態圖片_不用手。自動、智能摳圖,圖片去背景

BgEraser 是一款基于 AI 的自動、智能圖片去背景工具&#xff0c;無需勾選可用、可刪除區域&#xff0c;上傳圖片&#xff0c;立即下載即扣圖完成的圖片。AppinnBgEraser 真是懶人的福音。在此之前&#xff0c;比如很好用的在線去背景服務 remove.bg&#xff0c;是需要用戶手動…

html用dom顯示xml,html DOM文件引用一個XML文件將不會在瀏覽器中打印

我完全不熟悉這一點&#xff0c;我正在上課&#xff0c;現在變成了一個令人頭疼的問題。我有這個HTML DOM文件&#xff0c;它引用了一個XML文件&#xff0c;我需要在瀏覽器中顯示在屏幕上。它應該只打印標題&#xff0c;標題&#xff0c;第一個&#xff0c;最后一個&#xff0c…

bigdecimal 保留兩位小數_Python的保留小數及對齊

Python的保留小數&#xff1a;方法1&#xff1a;用round函數(有坑)。median 12.3004886print(round(median, 2)) # 保留兩位小數print(round(median, 3)) # 保留三位小數print(round(median, 4)) # 保留四位小數運行結果&#xff1a;12.312.312.3005可以看出Python中的r…