python调用matlab函数实例_通过 Python 调用 MATLAB 函数

本文介绍如何在MATLAB R2017a环境中安装Python引擎,并实现MATLAB与Python之间的互相调用。包括Python安装MATLAB引擎的具体步骤、验证安装是否成功的方法以及如何在MATLAB中调用Python函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MATLB安装于/opt/local/MATLAB/R2017a目录

一、Python安装MATLAB引擎

为了不“污染”MATLAB,先建立engines/python的备份(两个分别用于python2,python3)

sudo chmod a+rw /opt/local/MATLAB/R2017a/extern/engines

cp -Rf /opt/local/MATLAB/R2017a/extern/engines/python /opt/local/MATLAB/R2017a/extern/engines/python-27

cp -Rf /opt/local/MATLAB/R2017a/extern/engines/python /opt/local/MATLAB/R2017a/extern/engines/python-35

sudo chmod 755 /opt/local/MATLAB/R2017a/extern/engines

安装:

cd /opt/local/MATLAB/R2017a/extern/engines/python-27

python setup.py build

sudo python setup.py install

这里安装的是Python2,安装python3如下:

cd /opt/local/MATLAB/R2017a/extern/engines/python-35

python3 setup.py build

sudo python3 setup.py install

二、验证:

pip list一下发现有下面这个模块了:

matlabengineforpython R2017a

三、使用(调用MATLAB内置函数isprime)

~$ python

Python 2.7.12 (default, Dec 4 2017, 14:50:18)

[GCC 5.4.0 20160609] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import matlab.engine

>>> eng = matlab.engine.start_matlab()

>>> tf = eng.isprime(37)

>>> print(tf)

True

>>>

四、MATLAB中调用python函数

MATLAB R2015a 开始支持直接调用 Python:

>> pyversion

version: '2.7'

executable: '/usr/bin/python'

library: 'libpython2.7.so.1.0'

home: '/usr'

isloaded: 0

>> py.print('Hello world!')

Hello world!

>> py.sum([0,1,2])

ans =

3

>> py.print(py.pow(int32(2), int32(1000)))

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

>>

导入.py文件(用edit命令创建test1.py):

>> edit test1.py

>> py.test1.c1(4,7)

ans =

11

>>

其中test1.py的内容如下:

def c1(a1,b1):

c=a1+b1

return c

但有时import有些模块会出现libstdc++.so.6版本不对的情况,如py.importlib.import_module('cv2')

/opt/local/MATLAB/R2017a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

依赖GLIBCXX_3.4.21,但Matlab自带的那个最高支持到GLIBCXX_3.4.20

$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25|grep GLIBC

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBCXX_3.4.21

GLIBCXX_3.4.22

GLIBCXX_3.4.23

GLIBCXX_3.4.24

GLIBCXX_3.4.25

GLIBC_2.2.5

GLIBC_2.3

GLIBC_2.14

GLIBC_2.4

GLIBC_2.18

GLIBC_2.16

GLIBC_2.3.4

GLIBC_2.17

GLIBC_2.3.2

GLIBCXX_DEBUG_MESSAGE_LENGTH

$ strings /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6.0.20|grep GLIBC

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBC_2.3

GLIBC_2.2.5

GLIBC_2.3.2

.........

解决方法把/opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6链接改过来(比较粗暴的做法,暂时没发现matlab运行有问题)

sudo rm /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6

不行再改回来

sudo rm /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6

sudo ln -s /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6.0.20 /opt/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值