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 ...
随机推荐
- 【转】Impala 中的 Invalidate Metadata 和 Refresh
前言Impala采用了比较奇葩的多个impalad同时提供服务的方式,并且它会由catalogd缓存全部元数据,再通过statestored完成每一次的元数据的更新到impalad节点上,Impala ...
- Android Studio 之 DataBing ,不需要再一个个findViewById了
使用DataBinding,不需要再一个个findViewById了 1.在 build.gradel 中 添加下面语句 dataBinding{ enabled true } 2.在 activit ...
- ThreadPoolExecutor的坑
ExecutorService executorService = new ThreadPoolExecutor(0, MAX_THREAD_NUM, 60, TimeUnit.SECONDS, ne ...
- TF 保存模型为 .pb格式
将网络模型,图加权值,保存为.pb文件 write.py # -*- coding: utf-8 -*- from __future__ import absolute_import, unicod ...
- SpatiaLite, load spatial extension first
- 使用analyze命令统计信息
① 搜集和删除索引.表和簇的统计信息② 验证表.索引和簇的结构③ 鉴定表和簇和行迁移和行链接针对analyze的搜集和删除统计信息功能而言Oracle推荐使用DBMS_STATS包来代替analyze ...
- Hash算法及java HashMap底层实现原理理解(含jdk 1.7以及jdk 1.8)
现在很多公司面试都喜欢问java的HashMap原理,特在此整理相关原理及实现,主要还是因为很多开发集合框架都不甚理解,更不要说各种其他数据结构了,所以造成面子造飞机,进去拧螺丝. 1.哈希表结构的优 ...
- Android -------- kotlin插件神器Json直接生成javaBean
这是一个data class从JSON字符串生成Kotlin 的插件,换句话说,是一个将JSON字符串转换为Kotlin data class(Json到Kotlin)的插件 在使用Kotlin进行开 ...
- g-api notes
目录 Q: What is GOrigin? What the meaning of parameters GMat(const GNode &n, std::size_t out) Q: h ...
- sublime px转rem的方法【亲测有效】
在开发手机网站的时候,我们经常会用到rem来作为单位,但是手动转rem太麻烦了,那么怎么办呢?sublime安装cssrem来进行快捷操作. 安装过程: 第一步:去git上克隆 https://git ...