Python调用Matlab2014b引擎
用惯Python的你,是不是早已无法忍受matplotlib那丑陋无比的图以及蛋疼无比部署依赖?
当当当当,Matlab2014b的Python Engine API现已加入豪华午餐。
上次写了一篇文章,讲用C++调用Matlab的绘图引擎,不过呢有句话怎么说来着?人生苦短,我用Python。
这次就说一说怎么用Python调用Matlab的引擎。Python大法好,这个可比C++要容易太多了。
过程非常简单,第一步是安装,假设Matlabroot是Matlab的安装根目录
找到你的Matlab安装根目录,然后Shell进入matlabroot\extern\engines\python目录中,执行
python setup.py install
完事了。注意,一定要用管理员权限执行。
不用管理员权限的安装方法稍微复杂一点点:
cd "matlabroot\extern\engines\python"
python setup.py build --build-base builddir install --install-base installdir
将installdir添加到Python的包搜索路径中,再加入到PYTHONPATH环境变量中即可。
Matlab的Python引擎怎么用呢? 更简单了:
import matlab.engine 就可以开始了。
然后是一段测试用的Python脚本:
import matlab
import matlab.engine
import time def basic_test(eng):
print "Basic Testing Begin"
print "eng.power(100,2) = %d"%eng.power(100,2)
print "eng.max(100,200) = %d"%eng.max(100,200)
print "eng.rand(5,5) = "
print eng.rand(5,5)
print "eng.randi(matlab.double([1,100]),matlab.double([3,4]))"%\
eng.randi(matlab.double([1,100]),matlab.double([3,4]))
print "Basic Testing Begin" def plot_test(eng):
print "Plot Testing Begin"
eng.workspace['data'] = \
eng.randi(matlab.double([1,100]),matlab.double([30,2]))
eng.eval("plot(data(:,1),'ro-')")
eng.hold('on',nargout=0)
eng.eval("plot(data(:,2),'bx--')")
print "Plot testing end" def audio_test(eng,freq,length):
print "Audio Testing Begin"
eval_str = "f = %d;t=%d;"%(freq,length)
eng.eval(eval_str,nargout = 0)
eng.eval('fs = 44100;T=1/fs;t=(0:T:t);',nargout = 0)
eng.eval('y = sin(2 * pi * f * t);',nargout = 0)
eng.eval('sound(y,fs);',nargout = 0)
time.sleep(length)
print "Audio Testing End" def fourier_test(eng):
pass def demo(eng):
basic_test(eng)
plot_test(eng)
audio_test(eng,680,1) if __name__ == "__main__":
print "Initializing Matlab Engine"
eng = matlab.engine.start_matlab()
print "Initializing Complete!"
demo(eng)
print "Exiting Matlab Engine"
print "Press Any Key to Exit"
raw_input();
eng.quit()
print "Bye-Bye"
比起C++ Engine的API,Python Engine的最牛逼之处就是可以直接以原生的形式调用Matlab内建函数,而不是用Eval方法。当然,如果你想用也是一点问题都没有的。同时,变量的存取再也不用和一堆mxArray以及它们的ADT打交道了,直接以字典的形式对engine.workspace进行存取即可。显然比C++的调用方式更为科学。
下面的可以做一个备忘Sheet
###Matlab Engine for Python
#Call Matlab Function from Python ------------------------------
##Step 1: Installation #Install with Administrator Privileges
cd "matlabroot\extern\engines\python"
python setup.py install #Install without Administrator Privileges cd "matlabroot\extern\engines\python"
python setup.py build --build-base builddir install --install-base installdir Include 'installdir' in the search path for Python packages
Add 'installdir' to the PYTHONPATH environment variavle ------------------------------
##Step 2: Using Matlab Engine #Start and quit
import matlab.engine
eng = matlab.engine.start_matlab()
eng.quit() #Call Matlab Functions:
#Just call with form eng.xxx()
#the function xxx should in the namespace of matlab. #Asynchronously Call
import matlab.engine
eng = matlab.engine.start_matlab()
future = eng.sqrt(4.0,async=True)
ret = future.result()
print(ret) #WorkSpace Usage:
import matlab.engine
eng = matlab.engine.start_matlab()
eng.workspace['y'] = x
a = eng.eval('sqrt(y)')
print(a) #Skills for unsupported features in python
#eng.eval()
import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval("T = readtable('patients.dat');",nargout=0) #Plot With Matlab:
import matlab.engine
eng = matlab.engine.start_matlab()
data = eng.peaks(100)
eng.mesh(data)
------------------------------
Python调用Matlab2014b引擎的更多相关文章
- Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序
Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...
- [python][matlab]使用python调用matlab程序
问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划 ...
- python调用matlab
官网链接: https://ww2.mathworks.cn/help/matlab/matlab_external/call-user-script-and-function-from-python ...
- python调用虹软2.0(全网首发)-更新中
python调用虹软2.0目前没有任何demo可以参考,自己研究了2个晚上终于把第一步做出来了,使用了opencv来加载和显示图片,龟速更新中 这一版作废,新版已发出:https://www.cnbl ...
- Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)
为了梦想与了信仰 开局一张图 主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用 先删库 再跑路..... ...
- Windows中使用 Python 调用 Matlab 程序
https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...
- Linux解决Python调用Matlab函数无法导入matlab.engine问题及其他注意事项
问题描述 Linux系统,根据matlab官方文档说明,利用Matlab中的API来实现Python调用Matlab函数.具体方法见文档: https://ww2.mathworks.cn/help/ ...
- 最全总结!聊聊 Python 调用 JS 的几种方式
1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
随机推荐
- 记一次CPU使用100%问题排查
需求 前端同事说测试环境的服务接口查起来很慢,很不稳定,不是个别接口,而是大量接口. 情况分析 由于是在测试环境联调,没有多少用户量.第一步:先去服务器看看资源的使用情况.使用top命令,查看cpu的 ...
- TDD(测试驱动开发)
什么是 TDDTDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Driven Development).广义的 TDD 是 ATDD(Acceptance Tes ...
- Fluent使用UDF遇见Received signal SIGSEGV
Fluent版本:19.0 究其原因,一般是因为我们编写的UDF当中指针错误,导致未能正确获取Fluent一些变量的值,从而造成该错误. 下面我们通过调试手段来为了重现该错误,直观查看错误原因. 我们 ...
- <每日 1 OJ> -24. The Simple Problem
题目描述 Solo上了大学,对数学很感兴趣,有一天他面对数分三,一个Sequence(数列)摆在了他面前,这可难住他了……序列如下:S(a,k,n)=a+(k+a)+(2k+a)+…+(nk+a),题 ...
- Self-Supervised Representation Learning
Self-Supervised Representation Learning 2019-11-11 21:12:14 This blog is copied from: https://lilia ...
- zookeeper核心原理全面解析
下述各zookeeper机制的java客户端实践参考zookeeper java客户端之curator详解. 官方文档http://zookeeper.apache.org/doc/current/z ...
- 分布式快照算法: Chandy-Lamport 算法
转载https://zhuanlan.zhihu.com/p/53482103 这哥们写的好,顺便转过来吧,当做学习用. 分布式快照算法: Chandy-Lamport 算法 0. 引言 Spark ...
- tp的增删改查的结果判断?
参考: https://blog.csdn.net/qq_27930635/article/details/78853908 总之, 要用 全等 来判断, = = = 注意, 不要再用 mysql_a ...
- css---移动端网站专属BUG【苹果手机】
最近在前端写页面的时候,遇到了三个苹果手机的专属BUG,记录下... BUG1:苹果手机 form 表单的input有阴影 解决方法: input { /* 1 */ overflow: visibl ...
- thinkphp项目部署在phpstudy里的nginx上
朋友的一个thinkphp做的项目,让我帮他部署一下的,LINUX服务器,用宝塔. 第一台服务器,装上宝塔,宝塔里装NGINX,PHP5.6,再建立网站,绑定域名,访问成功,一切正常! 昨天试着给另一 ...