使用Python能使用MATLAB的函数吗?
答案是可以的!
The MATLAB Engine API for Python provides a package for Python to call MATLAB as a computational engine. (官方网址:Calling MATLAB from Python)
这真是一个人民群众喜闻乐见的好事情!
至于为啥要在Python里调用MATLAB。这可真是我的血泪史了。
Python的3D图的绘制还是逊于MATLAB,最常用的
matplotlib
没有3D引擎!如果要画3D图(比如绘制三维方向图quiver3D
),很多时候都要用到mayavi
,而且这个函数库还有非常严格的版本的依赖项的要求。有一点没哄好,直接就罢工了。另外,MATLAB在工程计算和工程仿真上,比Python强的不是一星半点。
在Python中安装MATLAB引擎
官方介绍
- To install and start the engine, see Get Started with MATLAB Engine API for Python.
- To call Python functions from MATLAB, see Python Libraries.
个人介绍
首先要知道两个路径:
-
Python的interpreter的位置。
我用的Anaconda的Python.exe,所以对应的库要安装在该路径下。
-
MATLAB的安装路径。
要在这里找到setup.py。
首先在MATLAB安装路径下找到setup.py,我的路径是E:\MATLAB R2019b\extern\engines\python
。
打开Anaconda Prompt(使用Anaconda Prompt是直接安装到Anaconda的环境下),切换路径到该文件夹,执行python setup.py install
。
(使用pip要麻烦一点,不推荐)
结果演示
然后随便找个代码跑一下(选自https://blog.youkuaiyun.com/wkk15903468980/article/details/79196382 )
import matlab
import matlab.engine
import os
import time
import numpy as np
eng=matlab.engine.start_matlab()
mat=eng.fspecial('gaussian',matlab.double([100,100]),3.0)
eng.mesh(mat)
#show from numpy
mat=np.ones([100,100])
mat2=mat.tolist()
mat3=matlab.double(initializer=mat2)
eng.mesh(mat3)
os.system('pause')
结果如图:
常见用法
后续有必要的话,会单独整理出常见用法的小Demo。
一些tips:
- (待验证)在使用figure()函数时发现一个小区别,在matlab中写为figure(1); 在python中必须写为eng.figure(1.0),否则会报错:matlab.engine.MatlabExecutionError: First argument must be a figure object or a positive Integer. 按照这句话应该是说第一个参数必须是figure object或者正的integer,然而实际是得用1.0这个double型才能跑。https://blog.youkuaiyun.com/wkk15903468980/article/details/79196382
- ……