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库的调用

Matlab下调用Python接口_第1张图片

Matlab下调用Python接口_第2张图片

这是在默认你已经成功安装了Python下OpenCV的情况下,Matlab调用的结果。

下面看一对应的Python代码:

import cv2
img=cv2.imread('Lee02.png')
cv2.imshow('Img',img)

有人可能会想,可不可以在Matlab直接 import cv2或 import py.cv2。前者目前没有,后者针对OpenCV的也没有,但是有类似后者的语法:


Matlab下调用Python接口_第3张图片

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 newlist

def theend(words):
    """Append 'The End' to list of words"""
    words.append('The End')
    return words
从Matlab命令行窗口把该模块加入到Python搜索路径:

if count(py.sys.path,'') == 0
    insert(py.sys.path,int32(0),'');
end
调用mymod.py模块有一个输入参数,现在在Matlab下创建一个输入参数:

N = py.list({'Jones','Johnson','James'})
Matlab下调用Python接口_第4张图片
在Matlab下调用这个函数的具体语法如下:

names = py.mymod.search(N)

完整运行结果如下:

Matlab下调用Python接口_第5张图片


还有更多功能,请参阅Matlab官方文档。












参考:

1. MATLAB与C语言的接口

2. MATLAB中调用Python



你可能感兴趣的:(Python,Matlab)