在MATLAB中调用 Python

您可以通过将 py. 前缀添加到 Python 名称,直接从 MATLAB 访问 Python 库。要调用 Python 标准库中的内容,请在 Python 函数或类名称的前面添加 py.。要调用可用模块中的内容,请在后跟 Python 函数或类名称的 Python 模块名称前面添加 py.。例如:

py.list({'This','is a','list'})      % Calls built-in function list
py.textwrap.wrap('This is a string') % Calls wrap function in module textwrap

无需导入模块便可使用它们。但您可以将 Python 名称导入到您的 MATLAB 函数中,方法与导入 MATLAB 包中的内容的方法相同。

MATLAB 中的 Python 库 – MATLAB & Simulink – MathWorks 中国

检查环境

使用 pyversion 检查Matlab能否调用Python:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVFldTSz-1646290090554)(C:\Users\14158\AppData\Roaming\Typora\typora-user-images\1646139574963.png)]

其中isloaded表示是否已加载Python,如果执行了Python语句或调用了Python模块,isloaded就变为1:

如果Matlab没有找到Python,则返回为空,这主要是由于Python路径未添加到环境变量所致

解决办法:将Python安装目录添加到环境变量,或者直接指定Python可执行文件的路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVVZ7Hu3-1646290090556)(C:\Users\14158\AppData\Roaming\Typora\typora-user-images\1646139701590.png)]

pyenv 也可以检测验证是否安装了受支持的版本

直接执行 python 语句:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dJE7lsoy-1646290090556)(C:\Users\14158\AppData\Roaming\Typora\typora-user-images\1646202549839.png)]

函数调用

点击左上角的新建脚本,输入以下代码:

# myfun.py
def test():
    print('Hello, Matlab!')

def add(a, b):
    c = a + b
    return c

将文件保存命名为:myfun.py

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LkhKgf06-1646290090557)(C:\Users\14158\AppData\Roaming\Typora\typora-user-images\1646202970021.png)]

注意:如果修改了myfun.py,Matlab不会立即使用新的代码,需要重载Python模块

% 重载Python模块
clear classes
obj = py.importlib.import_module('myfun');
py.importlib.reload(obj);

执行上面语句后,就可以调用修改过的Python代码了。

类调用

在 myfun.py 中添加代码:

class myclass():
    def __init__(self):
        self.count = 0
    def add(self):
        self.count = self.count + 1
        print('count = ', self.count)

在Matlab中执行:(注意此时代码已经被修改,需要重新加载python模块)

mycalss = py.myfun.myclass;
for i = 1:5
    mycalss.add()
end

输出结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XhUTJJys-1646290090558)(C:\Users\14158\AppData\Roaming\Typora\typora-user-images\1646287527165.png)]

Python 帮助文档

您可以在 MATLAB 中显示 Python 函数的帮助文本。例如:

py.help('list.append')
Help on method_descriptor in list:

list.append = append(...)
    L.append(object) -> None -- append object to end

键入 py. 时的 Tab 键自动填充不显示可用的 Python 功能。有关详细信息,请参阅Python 函数的帮助

创建数据

下表显示用于创建 listtupledict 类型的命令。左侧的命令从 Python 解释器运行。右侧的命令是 MATLAB 命令。

Python list[] MATLAB py.list
>>> ['Robert', 'Mary', 'Joseph'] >> py.list({'Robert','Mary','Joseph'})
>>> [[1,2],[3,4]] >> py.list({py.list([1,2]),py.list([3,4])})
Python tuple() MATLAB py.tuple
>>> ('Robert', 19, 'Biology') >> py.tuple({'Robert',19,'Biology'})
Python dict{} MATLAB py.dict
>>> {'Robert': 357, 'Joe': 391, 'Mary': 229} >> py.dict(pyargs(...'Robert',357,'Mary',229,'Joe',391)) 有关传递关键字参数的信息,请参阅 pyargs

访问python模块

我们可以在 MATLAB 中使用自己的 Python 代码和第三方模块。

内容必须位于 Python 路径中。安装第三方模块会将内容放在 Python 路径中。

如果我们创建自己的模块,则由我们负责将它们放到路径中。

调用用户定义的 Python 模块

物联沃分享整理
物联沃-IOTWORD物联网 » 在 MATLAB 中调用 Python

发表评论