今天介绍的内容比较基础,希望能达到抛砖引玉的效果。
Matlab 和 Python 结合使用无非分为两种情形:
1. Matlab中使用Python
MATLAB 支持与包括 Python 在内的多种其他语言互操作, 如 C/C++、Java、Fortran、.NET。
下面先介绍介绍 如何在 MATLAB 中调用 Python
首先我们要在自己所用的平台上安装和管理 Python 环境及其依赖项,推荐用Anaconda3,配置好后进行下面的操作。
现在在 MATLAB 中访问 Python,需要查找 Python 可执行文件的完整路径(比如在Anaconda3中创建了多个虚拟环境,需要将 python.exe 这个东西的路径与Matlab相关联)。
下面是针对 Windows 的示例。在 Mac 和 Linux 上,操作系统命令可能有所不同。
clear
pe = pyenv;
if pe.Status == "NotLoaded"
[~,exepath] = system("where python");
pe = pyenv('Version',exepath);
另外,可以直接用 pyenv
进行手动添加:直接采用字符串形式传递 Python 可执行文件的路径。
比如,我们在 anaconda3
中除了基本环境 base
之外,还有个 pytorch-gpu
的环境,而这个环境一般会在anaconda3
安装路径下的 envs
文件夹中,因此通用的路径是:`./anaconda3/envs/pytorch-gpu/python.exe
pe = pyenv('Version','D:\publicsoftware\anaconda3\envs\pytorch_gpu\python.exe')
值得注意的是,每次新添加环境时,需要重新启动 Matlab !
在 MATLAB 中设置 Python 之后就可以使用 Python 中的模块或者我们自己写的模块了。
在命令窗口输入:pyenv
检查关联的 Python
解释器,如下图
1.png
在 MATLAB 中调用 Python 时,首先使用 py,后跟包或方法名称,推荐这种用法。如果用 import py.modulename.*
命令时,很容易混淆:到底是 Matlab中的包还是Python中的。
一个例子:
编写如下模块名为mymodule.py
的Python代码
# !/usr/bin/env python3
# -*- coding:utf-8 -*-
class Calculator:
def __init__(self, a, b):
self.a = a
self.b = b
def add_operator(self):
return self.a + self.b
然后在Matlab中使用如下命令创建模块的对象
pycal = py.mymodule.Calculator(10, 8);
pycal =
Python Calculator - 属性:
a: 10
<mymodule.Calculator object at 0x00000221DD671BC8>
创建好对象之后进行调用其方法:(可以通过methods
和properties
分别查看方法和属性)
pycal.add_operator()
ans =
目前,在Matlab中使用Python有一定的局限性,比如每次更新完Python代码之后,需要重新启动Matlab才会执行更新后的代码,否则还是会执行更新前的代码等等。
2. Python 中使用 Matlab
目前有两种方法:
(1)在python中安装Matlab引擎,找到路径 ‘matlabroot/extern/engines/python’,如D:\publicsoftware\MATLAB\R2020b\extern\engines\python
,然后 python setup.py install
进行安装。
import matlab.engine
eng = matlab.engine.start_matlab()
x = eng.sqrt(float(100)) ## x = eng.sqrt(100.)
eng.exit()
值得注意的是**,Matlab与Python之间存在着数据类型的转换,如上述代码中,如果使用x = eng.sqrt(100)
,
Python 中会报错,因为python中输入的100
是Int
类型的(但在 Matlab 中默认输入数据都是double
型),因此这里需要输入float
类型的数据与之对应,所以为直接输入100.
或者转换一下float(100)
。
下面表格说明了两者之间的数据类型转换:
6.png
一键打包,最后选择 for_redistribution_files_only
文件夹下的内容,cd
进入到该文件夹,进行模块的安装:python setup.py install
,
安装成功后,该模块的命名与我们打包时设置的一样,即 myadd
。这个模块会安装在 D:\publicsoftware\anaconda3\Lib\site-packages\myadd
中,相当于一个第三方模块。
最后就像使用其他模块一样,进行导入使用了,不过有点区别,看下面 Python 代码:
import myadd
myadd =
<module 'myadd' from 'D:\\publicsoftware\\anaconda3\\lib\\site-packages\\myadd\\__init__.py'>
mat_obj = myadd.initializer()
mat_obj =
<matlab_pysdk.runtime.deployablepackage.DeployablePackage object at 0x0000018927DDFD88>
result = mat_obj.myadd(100, 80)
result =
# close connection
mat_obj.terminate()