在系统中安装MATLAB2015a以上版本和Python后,可以从MATLAB调用Python的函数、模块和类对象等。本书使用MATLAB 2024a。[大谦MATLAB,dqmatlab点com]
概述
从MATLAB调用Python,首先需要在计算机上安装Python,然后在MATLAB中设置路径。在MATLAB的工具栏中单击“设置路径”按钮,打开“设置路径”对话框,如图20-1所示。单击“添加并包含子文件夹”按钮添加Python的安装目录,会自动添加Python安装目录下的所有路径。单击“保存”按钮。
图20-1 “设置路径”对话框
可以用pyversion函数查看当前Python的版本,在安装有多个版本Python的情况下,可以将某个版本设置为当前版本。
在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函数。
py.PackageName.FunctionName(ArgList)
其中,PackageName为Python包的名称,FunctionName为函数名称,ArgList为参数列表。
在MATLAB命令窗口输入:
>> a=py.math.ceil(3.16)
a =
4
该语句实现了在MATLAB中调用Python的Math包对给定的浮点数进行圆整。
>> class(a)
ans =
'py.int'
说明变量a的数据类型是Python的整型。
在MATLAB命令窗口输入:
>> a=py.random.randrange(10,50,2)
ans =
18
该语句在MATLAB中调用Python的Random包获取10到50之间的一个随机数。
>> a=py.random.random()
ans =
0.3550
用Python的Random包返回一个0和1之间的随机数。
在MATLAB命令窗口输入:
>> t=py.datetime.datetime.now()
t =
datetime
2024-03-07 13:14:08
该语句MATLAB中调用Python的Datetime包获取当前日期和时间。
在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类型。
>> 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的斐波那契数列。
# 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搜索路径。
>> if count(py.sys.path,'modpath') == 0
insert(py.sys.path,int32(0),'modpath');
end
调用fib函数,在模块名和函数名前面键入py.。
>> py.mymod.fib(10)
ans=
Python list(不带属性)。
[1, 1, 2, 3, 5, 8]
该函数返回项数为10的斐波那契数列。