基于组件(Python包)的混合编程

可以用MATLAB的库编译器生成Python包,用于Python程序中。[大谦MATLAB,dqmatlab点com]

创建M文件并生成Python包

本例的M文件可以实现魔方矩阵的生成,可以指定魔方矩阵的大小,作为输入参数。在MATLAB的编辑器中编写下面的代码,保存为magicsquare.m。

code.matlab
function m=magicsquare(n)
if ischar(n)
n=str2num(n);
end
m=magic(n)

在MATLAB命令窗口中输入

code.matlab
>> magicsquare(5)

输出如下所示:

code.matlab
17  	 24 	1 	8	15
23	 5 	7 	14	16
4 	 6 	13 	20 	22
10	 12 	19 	21 	3
11	 18 	25 	2 	9

在MATLAB命令窗口中输入

code.matlab
>> libraryCompiler

打开库编译器,如图20-2所示。在工具栏中的“TYPE”列表框中选择“Python Package”选项,单击“EXPORTED FUNCTIONS”列表框右边的加号按钮,添加前面创建的M文件magicsquare.m,在“Library Information”部分将Library Name设置为“MSQ”。 保存工程,命名为MSQ-PY.prj。

Document Image

图20-2 MATLAB库编译器

单击工具栏中的“Package”按钮,打包组件。生成的文件和目录包括如下。

for_redistribution目录:包含安装应用程序和MATLAB运行时的文件。

for_testing目录:包含mcc创建的所有文件,用于测试安装。

for_redistribution_files_only目录:包含应用程序重新发布所需要的文件。

PackagingLog.txt:编译器生成的日志文件。

在Python中使用Python包

将MATLAB M文件编译为Python包后,可以在Python程序中使用该包。

1.运行Python安装脚本并设置环境变量

库编译器在生成Python时会生成一个安装文件,它安装MATLAB运行时文件和必要的文件。该安装文件在for_redistribution目录中。

(1)有安装文件的情况

按照以下步骤安装Python包:

将安装文件从for_redistribution目录复制到指定位置。

运行安装文件。

记下安装文件与Python包文件的位置。

安装完成以后,在包含Python包文件的目录中打开一个指令终端。

在命令提示符窗口中运行Python安装脚本。

python setup.py install

设置必要的环境变量。

(2)没有安装文件的情况

如果已经安装了MATLAB运行时文件,则按照以下步骤安装Python包:

将for_redistribution_files_only目录下的内容复制到指定位置中。

在包含Python包文件的目录中打开一个指令终端。

运行Python安装脚本。

python setup.py install

设置必要的环境变量。

注意:在运行Python安装脚本时,有时会显示下面的出错信息:

'python' 不是内部或外部命令,也不是可运行的程序或批处理文件。

此时需要设置环境变量。按照以下步骤进行设置。

在计算机桌面用鼠标右键单击“我的电脑”图标,在弹出菜单中单击“属性”选项,选择高级系统设置,弹出如图20-3所示的“系统属性”对话框。

在“系统属性”对话框中单击“环境变量”按钮,打开“环境变量”对话框,如图20-4所示。

Document Image Document Image

图20-3 “系统属性”对话框 图20-4 “环境变量”对话框

在“系统变量”列表框中找到并双击Path变量所在的行,打开“编辑系统变量”对话框,如图20-5所示。在“变量值”文本框中,添加Python在计算机上的安装路径,注意:在原有字符串后面添加分号作为间隔。

单击“确定”按钮,回到“系统变量”对话框,单击“确定”按钮。

设置环境变量以后,退出命令提示符窗口。然后重新打开命令提示符窗口,运行Python安装脚本就可以实现正常安装,如图20-6所示。

Document Image Document Image

图20-5 “编辑系统变量”对话框 图20-6 运行Python安装脚本

2.使用Python包

在Python窗口中依次输入下面的命令行,调用MSQ包的magicsquare方法计算魔方矩阵。

code.python
>>> import MSQ
>>> import matlab
>>> myMSQ =MSQ.initialize()
>>> print( myMSQ.magicsquare(5))
[[20.0 24.0	1.0 8.0 15.0], [23.0 5.0	7.0 14.0 16.0], [4.0 6.0 13.0 20.0 22.0], [10.0 12.0 19.0 20.0 3.0], [11.0 18.0 25.0 2.0 9.0]]