1 导入编译好的Python包
不管是使用库编译器还是mcc命令,进行编译时都可以指定名字空间和包名。其中名字空间是可选项。[大谦MATLAB,dqmatlab点com]
例如,1.3.2小节生成的Python包的包名为mymagic,导入Python包的语法格式为:
code.python
import mymagic
2 初始化MATLAB运行时
将编译好的MATLAB函数集成到Python程序中,代码必须初始化MATLAB运行时。调用Python包的initialize()方法,实现调用编译好的MATLAB函数,将它载入到MATLAB运行时。
initialize()方法返回一个对象,可以用它调用包中编译好的MATLAB函数。例如,使用下面的代码启动MATLAB运行时并载入mymagic包中的MATLAB函数:
code.python
>>> import mymagic
>>> m=mymagic.initialize()
3 调用编译好的MATLAB函数
用initialize()函数返回的Python对象调用编译好的MATLAB函数。调用格式为:
code.python
result1,...resultN=my_client.function_name(in_args, nargout=nargs,
stdout=out_stream,
stderr=err_stream)
各选项的意义为:
- my_client: initialize()返回的对象的名称。
- function_name: 调用的函数的名称。
- in_args: 逗号间隔的输入变量列表。
- nargs: 结果的个数。默认值为1。
- out_stream: Python StringIO对象接收控制台输出。默认情况下将输出导向控制台。
- err_stream: Python StringIO对象接收出错信息输出。默认情况下将输出导向控制台。
注意:如果函数左侧的变量个数小于nargs,则最后一个变量包含剩余结果组成的列表。例如:
code.python
result1, result2=myMagic.triple(5,nargout=3)
result1包含一个值,result2包含两个值组成的列表。
- 调用的MATLAB函数只有一个输出的情况
从包mutations中调用MATLAB函数result=mutate(m1, m2, m3),使用下面的代码:
code.python
>>> import mutations
>>> import matlab
>>> myMutator=mutations.initialize()
>>> m1=matlab.double([1,2,3])
>>> m2=matlab.double([10,20,30])
>>> m3=matlab.double([100,200,300])
>>> result=myMutator.mutate(m1,m2,m3)
- 调用的MATLAB函数没有输出的情况
从包mutations中调用MATLAB函数mutate(m1, m2, m3),使用下面的代码:
code.python
>>> import mutations
>>> import matlab
>>> myMutator=mutations.initialize()
>>> m1=matlab.double([1,2,3])
>>> m2=matlab.double([10,20,30])
>>> m3=matlab.double([100,200,300])
>>> myMutator.mutate(m1,m2,m3,nargout=0)
- 用不同变量接收多个结果的情况
从包copier中调用MATLAB函数c1,c2=copy(o1,o2),使用下面的代码:
code.python
>>> import copier
>>> import matlab
>>> myCopier=copier.initialize()
>>> c1,c2=myCopier.copy("blue",10,nargout=2)
>>> print(c1)
"blue"
>>> print(c2)
10
- 用一个对象接收多个结果的情况
从包copier中调用MATLAB函数copies=copy(o1,o2),使用下面的代码:
code.python
>>> import copier
>>> import matlab
>>> myCopier=copier.initialize()
>>> copies=myCopier.copy("blue",10,nargout=2)
>>> print(copies)
["blue",10]
下面调用mymagic包中的函数。
code.python
>>> import mymagic
>>> import matlab
>>> m=mymagic.initialize()
>>> n=matlab.int32(5)
>>> mg=m.mymagic(n)
Matlab.double([[17.0,24.0,1.0,8.0,15.0],[23.0,5.0,7.0,14.0,11.0],[4.0,1.0,13.0,20.0,22.0],[10.0,12.0,19.0,21.0,3.0],[11.0,18.0,25.0,2.0,9.0]])
用mymagic函数生成5阶魔方矩阵。