从MATLAB调用Python函数
我想在MATLAB中调用一个Python函数,我该怎么做呢?
13 个回答
20
试试这个MEX文件,它可以让你从MATLAB直接调用Python,而不是像其他人建议的那样反过来。这个方法的整合效果相当不错:http://algoholic.eu/matpy/
你可以很简单地做到类似这样的事情:
[X,Y]=meshgrid(-10:0.1:10,-10:0.1:10);
Z=sin(X)+cos(Y);
py_export('X','Y','Z')
stmt = sprintf(['import matplotlib\n' ...
'matplotlib.use(''Qt4Agg'')\n' ...
'import matplotlib.pyplot as plt\n' ...
'from mpl_toolkits.mplot3d import axes3d\n' ...
'f=plt.figure()\n' ...
'ax=f.gca(projection=''3d'')\n' ...
'cset=ax.plot_surface(X,Y,Z)\n' ...
'ax.clabel(cset,fontsize=9,inline=1)\n' ...
'plt.show()']);
py('eval', stmt);
30
在Matlab 2014b版本中,可以直接从Matlab调用Python库。所有的库名称前面都会加上一个前缀py.
。
>> wrapped = py.textwrap.wrap("example")
wrapped =
Python list with no properties.
['example']
47
我在我的系统上遇到过类似的需求,这里是我的解决方案:
在MATLAB中,有一个叫做perl.m的函数,它可以让你从MATLAB中调用perl脚本。根据你使用的版本,它的位置可能在类似于
C:\Program Files\MATLAB\R2008a\toolbox\matlab\general\perl.m
的地方。
你可以创建一个叫做python.m的副本,把perl替换成python,确保检查一下它设置的命令路径,确保指向你安装的python。这样你就可以从MATLAB中运行python脚本了。
示例
这里有一个简单的平方函数,保存在名为"sqd.py"的文件中。当然,如果我做得更规范一点,我会在测试输入参数、有效数字等方面加一些检查。
import sys
def squared(x):
y = x * x
return y
if __name__ == '__main__':
x = float(sys.argv[1])
sys.stdout.write(str(squared(x)))
然后在MATLAB中,你可以这样做:
>> r=python('sqd.py','3.5')
r =
12.25
>> r=python('sqd.py','5')
r =
25.0
>>