用惯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引擎的更多相关文章

  1. Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序

    Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...

  2. [python][matlab]使用python调用matlab程序

    问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划 ...

  3. python调用matlab

    官网链接: https://ww2.mathworks.cn/help/matlab/matlab_external/call-user-script-and-function-from-python ...

  4. python调用虹软2.0(全网首发)-更新中

    python调用虹软2.0目前没有任何demo可以参考,自己研究了2个晚上终于把第一步做出来了,使用了opencv来加载和显示图片,龟速更新中 这一版作废,新版已发出:https://www.cnbl ...

  5. Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)

    为了梦想与了信仰    开局一张图   主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用   先删库 再跑路.....                         ...

  6. Windows中使用 Python 调用 Matlab 程序

    https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...

  7. Linux解决Python调用Matlab函数无法导入matlab.engine问题及其他注意事项

    问题描述 Linux系统,根据matlab官方文档说明,利用Matlab中的API来实现Python调用Matlab函数.具体方法见文档: https://ww2.mathworks.cn/help/ ...

  8. 最全总结!聊聊 Python 调用 JS 的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  9. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

随机推荐

  1. uniapp登录流程详解uni.login

    uni.login(OBJECT)登录 H5平台登陆注意事项: 微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见普通浏览器上实现微信登陆,并非开放API,需要向 ...

  2. JavaScript 箭头函数

    ES6新标准增加了一种新的函数,箭头函数. x=>x*x 相当于: function (x){ return x*x; } 如果参数不是一个,就需要用括号()括起来: // 两个参数:var t ...

  3. gitlab 上传代码

    #生成公钥ssh-keygen -t ed25519 -C "xxx@tianwang.com"#拷贝公钥pbcopy < ~/.ssh/id_ed25519.pub 在网页 ...

  4. TDD(测试驱动开发)

    什么是 TDDTDD 有广义和狭义之分,常说的是狭义的 TDD,也就是 UTDD(Unit Test Driven Development).广义的 TDD 是 ATDD(Acceptance Tes ...

  5. K8S集群搭建——基于CentOS 7系统

    环境准备集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5 节点名称 节点IPmaster 192.168.0.100node1 192.168.0.101node2 192. ...

  6. 19 条效率至少提高 3 倍的 MySQL 技巧

    阅读本文大概需要 4 分钟. 来源:https://zhuanlan.zhihu.com/p/49888088 本文我们来谈谈项目中常用的 MySQL 优化方法,共 19 条,具体如下: 1.EXPL ...

  7. RNN 权重共享

    之前在几篇博客中说到了权重共享,但都觉得不够全面,这里做个专题,以后有新的理解都在此更新. 1. 减少运算只是锦上添花之前说到权重共享可以减少运算,是的,但这样说好像是可有可无,只是运算量大小的问题, ...

  8. [Web 测试] Jest单元测试的几个指标

    三个参数代表什么? %stmts是语句覆盖率(statement coverage):是不是每个语句都执行了? %Branch分支覆盖率(branch coverage):是不是每个if代码块都执行了 ...

  9. JPA的查询方法总结

    一.使用where条件上一篇我们使用JPA进行了数据源的访问,默认JPA已经实现了好几个接口可以调用.但是,在实际的业务中,查询语句不可避免地需要使用where.order by等语句. 我们用商品数 ...

  10. 【转】MySQL的安装与配置——详细教程-window系统下

    https://www.cnblogs.com/winton-nfs/p/11524007.html 免安装版的Mysql MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库 ...