从MATLAB调用Python函数

77 投票
13 回答
141897 浏览
提问于 2025-04-15 15:51

我想在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
>>

撰写回答