MATLAB调用Python

在系统中安装MATLAB2015a以上版本和Python后,可以从MATLAB调用Python的函数、模块和类对象等。本书使用MATLAB 2024a。[大谦MATLAB,dqmatlab点com]

概述

从MATLAB调用Python,首先需要在计算机上安装Python,然后在MATLAB中设置路径。在MATLAB的工具栏中单击“设置路径”按钮,打开“设置路径”对话框,如图20-1所示。单击“添加并包含子文件夹”按钮添加Python的安装目录,会自动添加Python安装目录下的所有路径。单击“保存”按钮。

Document Image

图20-1 “设置路径”对话框

可以用pyversion函数查看当前Python的版本,在安装有多个版本Python的情况下,可以将某个版本设置为当前版本。

在MATLAB命令窗口键入:

code.matlab
>> pyversion
       version: '3.10'
    executable: 'C:\Users\ASUS\AppData\Local\Programs\Python\Python310\python.EXE'
       library: 'C:\Users\ASUS\AppData\Local\Programs\Python\Python310\python310.dll'
          home: 'C:\Users\ASUS\AppData\Local\Programs\Python\Python310'
      isloaded: 0

返回的内容根据计算机上安装的Python版本的不同会有所区别。

MATLAB调用Python函数

在MATLAB命令窗口输入类似下面语法的命令行可以调用Python函数。

code.matlab
py.PackageName.FunctionName(ArgList)

其中,PackageName为Python包的名称,FunctionName为函数名称,ArgList为参数列表。

在MATLAB命令窗口输入:

code.matlab
>> a=py.math.ceil(3.16)
a =
	4

该语句实现了在MATLAB中调用Python的Math包对给定的浮点数进行圆整。

code.matlab
>> class(a)
ans =
	'py.int'

说明变量a的数据类型是Python的整型。

在MATLAB命令窗口输入:

code.matlab
>> a=py.random.randrange(10,50,2)
ans =
	18

该语句在MATLAB中调用Python的Random包获取10到50之间的一个随机数。

code.matlab
>> a=py.random.random()
ans =
	0.3550

用Python的Random包返回一个0和1之间的随机数。

在MATLAB命令窗口输入:

code.matlab
>> t=py.datetime.datetime.now()
t =
	datetime
	2024-03-07 13:14:08

该语句MATLAB中调用Python的Datetime包获取当前日期和时间。

在MATLAB命令窗口输入:

code.matlab
>> ds={['2023-4-15'] ['2023-5-18'] ['2023-6-2']};
>> d=py.pandas.Series(ds)
d =
	Python Series
2023-4-15
2023-5-18
2023-6-2
dtype: object

该语句调用Python的pandas包将给定的元胞数组转换为Series类型。

code.matlab
>> dt=py.pandas.to_datetime(d)
dt =
	Python Series
2023-4-15
2023-5-18
2023-6-2
dtype: datetime64[ns]

该语句将d对象中元素的数据类型转换为日期时间数据类型。

MATLAB调用自定义Python模块

本例演示如何在MATLAB中创建模块。如果在Python编辑器中创建mymod.py,请确保模块在Python的搜索路径上。

当前目录修改为可写的,在MATLAB编辑器中打开一个新的文件,复制下面的命令行并保存为mymod.py。模块中有一个fib函数,计算项数为n的斐波那契数列。

code.python
# mymod.py
def fib(n):
  result=[]
  a, b=0, 1
  while b < n:
    result.append(b)
    a, b=b, a+b
  return result

从MATLAB命令提示符处,添加当前目录到Python搜索路径。

code.matlab
>> if count(py.sys.path,'modpath') == 0
insert(py.sys.path,int32(0),'modpath');
end

调用fib函数,在模块名和函数名前面键入py.。

code.matlab
>> py.mymod.fib(10)
ans=
  Python list(不带属性)。
    [1, 1, 2, 3, 5, 8]

该函数返回项数为10的斐波那契数列。