Matlab下调用Python接口
MATLAB 到 C 語言程序的轉換可以由兩種途徑完成,其一是 MATLAB 自己提供的 C 語言翻譯程序 mcc, 另一種是原第 3 方公司 MathTools 開發的 MATCOM。后者出現較早,功能遠比 MATLAB 自己的翻譯程序強大,可以直接將Matlab腳本轉換為C/C++代碼,MathWorks感受到了威脅,找人家談判,花巨資收購了MathTools 公司,并已將其開發技術融于MATLAB 中。最后Matlab又推出了C/C++接口,這也是適應市場需要。這不,不知道什么時候起,Matlab也開始支持Python調用了,并且Python也可以調用Matlab。這是大勢所趨啊,雖然目前的Matlab(本人用的Matlab2015b)對Python接口的支持還不是很完美,只支持一部分,但這也是Matlab擔心被Python取代,擔心被邊緣化而做出的改進,相信以后會有更多改進。下面介紹一下Matlab調用Python接口的一些示例。
首先說一下本人的環境配置,WIN7 64位系統,Matlab2015b, Anaconda4集成的Python3.6,親測不需要在Matlab下的Set Path下配置Python的路徑,Matlab會直接搜索Python安裝路徑,即使你添加了路徑,有些Python庫,如果Matlab不支持,自然無法調用。下面來看一些具體的示例:
1. Matlab對Python下OpenCV庫的調用
這是在默認你已經成功安裝了Python下OpenCV的情況下,Matlab調用的結果。
下面看一對應的Python代碼:
import cv2 img=cv2.imread('Lee02.png') cv2.imshow('Img',img)
有人可能會想,可不可以在Matlab直接 import cv2或 import py.cv2。前者目前沒有,后者針對OpenCV的也沒有,但是有類似后者的語法:
S = py.textwrap.wrap('This is a string'); import py.textwrap.wrap S = wrap('This is a string'); clear import
Matlab在對字符串的處理方面不如Python,所以Matlab對這方面Python接口的支持就非常好,而對于自己家有的,就支持不那么好了,當然是擔心被取代了。 上述代碼中的 clear import一定要有,當你使用了 import語句的時候,否則它會覆蓋Matlab內置的對應函數或類。
2. 創建Python對象
創建Python對象的語法如下:
pyObj = py.modulename.ClassName(varargin)其中 varargin表示送入Python構造器的__init__方法的列表參數。關于構造函數的相關幫助文檔示例如下:
py.help('textwrap.TextWrapper.__init__')3. 調用自定義Python模塊
自定義Python模塊如下:
# mymod.py """Python module demonstrates passing MATLAB types to Python functions""" def search(words):"""Return list of words containing 'son'"""newlist = [w for w in words if 'son' in w]return newlistdef theend(words):"""Append 'The End' to list of words"""words.append('The End')return words從Matlab命令行窗口把該模塊加入到Python搜索路徑:
if count(py.sys.path,'') == 0insert(py.sys.path,int32(0),''); end調用mymod.py模塊有一個輸入參數,現在在Matlab下創建一個輸入參數:
N = py.list({'Jones','Johnson','James'})
在Matlab下調用這個函數的具體語法如下:
names = py.mymod.search(N)
完整運行結果如下:
還有更多功能,請參閱Matlab官方文檔。
參考:
1. MATLAB與C語言的接口
2. MATLAB中調用Python
總結
以上是生活随笔為你收集整理的Matlab下调用Python接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python迭代器面试题
- 下一篇: 计算机怎么关闭u盘系统还原,u盘有写保护