今天介绍的内容比较基础,希望能达到抛砖引玉的效果。

Matlab 和 Python 结合使用无非分为两种情形:

Matlab中使用Python包;

Python中使用Matlab。

1. Matlab中使用Python

MATLAB 支持与包括 Python 在内的多种其他语言互操作, 如 C/C++、Java、Fortran、.NET。

下面先介绍介绍如何在 MATLAB 中调用 Python

首先我们要在自己所用的平台上安装和管理 Python 环境及其依赖项,推荐用Anaconda3,配置好后进行下面的操作。

现在在 MATLAB 中访问 Python,需要查找 Python 可执行文件的完整路径(比如在Anaconda3中创建了多个虚拟环境,需要将 python.exe 这个东西的路径与Matlab相关联)。

下面是针对 Windows 的示例。在 Mac 和 Linux 上,操作系统命令可能有所不同。

clear

clc

pe = pyenv;

if pe.Status == "NotLoaded"

[~,exepath] = system("where python");

pe = pyenv('Version',exepath);

end

另外,可以直接用 pyenv 进行手动添加:直接采用字符串形式传递 Python 可执行文件的路径。

比如,我们在 anaconda3 中除了基本环境 base 之外,还有个 pytorch-gpu的环境,而这个环境一般会在anaconda3安装路径下的 envs 文件夹中,因此通用的路径是:`./anaconda3/envs/pytorch-gpu/python.exe

pe = pyenv('Version','D:\publicsoftware\anaconda3\envs\pytorch_gpu\python.exe')

值得注意的是,每次新添加环境时,需要重新启动 Matlab !

在 MATLAB 中设置 Python 之后就可以使用 Python 中的模块或者我们自己写的模块了。

在命令窗口输入:pyenv 检查关联的 Python 解释器,如下图

1.png

在 MATLAB 中调用 Python 时,首先使用 py,后跟包或方法名称,推荐这种用法。如果用 import py.modulename.*命令时,很容易混淆:到底是 Matlab中的包还是Python中的。

一个例子:

编写如下模块名为mymodule.py的Python代码

# !/usr/bin/env python3

# -*- coding:utf-8 -*-

class Calculator:

def __init__(self, a, b):

self.a = a

self.b = b

def add_operator(self):

return self.a + self.b

然后在Matlab中使用如下命令创建模块的对象

pycal = py.mymodule.Calculator(10, 8);

pycal =

Python Calculator - 属性:

a: 10

b: 8

创建好对象之后进行调用其方法:(可以通过methods和properties分别查看方法和属性)

pycal.add_operator()

ans =

18

目前,在Matlab中使用Python有一定的局限性,比如每次更新完Python代码之后,需要重新启动Matlab才会执行更新后的代码,否则还是会执行更新前的代码等等。

2. Python 中使用 Matlab

目前有两种方法:

(1)在python中安装Matlab引擎,找到路径 ‘matlabroot/extern/engines/python’,如D:\publicsoftware\MATLAB\R2020b\extern\engines\python,然后 python setup.py install进行安装。

1.gif

使用如下:

import matlab.engine

eng = matlab.engine.start_matlab()

x = eng.sqrt(float(100)) ## x = eng.sqrt(100.)

eng.exit()

值得注意的是**,Matlab与Python之间存在着数据类型的转换,如上述代码中,如果使用x = eng.sqrt(100),

Python 中会报错,因为python中输入的100是Int类型的(但在 Matlab 中默认输入数据都是double型),因此这里需要输入float类型的数据与之对应,所以为直接输入100.或者转换一下float(100)。

下面表格说明了两者之间的数据类型转换:

2.png

3.png

4.png

5.png

(2) 将Matlab的主函数打包成组件形式供 Python 调用

编写如下简单的 myadd.m 文件

function s = myadd(a, b)

s = a + b;

end

将它编译为Python可调用的组件,方法是在命令窗口中输入 libraryCompiler,启动编译工具

6.png

一键打包,最后选择 for_redistribution_files_only文件夹下的内容,cd 进入到该文件夹,进行模块的安装:python setup.py install,

安装成功后,该模块的命名与我们打包时设置的一样,即 myadd。这个模块会安装在 D:\publicsoftware\anaconda3\Lib\site-packages\myadd中,相当于一个第三方模块。

最后就像使用其他模块一样,进行导入使用了,不过有点区别,看下面 Python 代码:

import myadd

"""

myadd =

"""

mat_obj = myadd.initializer()

"""

mat_obj =

"""

result = mat_obj.myadd(100, 80)

result =

180

# close connection

mat_obj.terminate()

mat_obj.exit()

3. 总结

以上介绍了关于 Matlab 和 Python 相互结合编程的基本方法,特别是我们用 Matlab 编写的一些的函数可以直接打包成组件的形式供 Python 调用,MATLAB Compiler SDK的方式更加方便些,受到的限制会更少些吧。

以上就是今天分享的内容了,有什么问题请朋友们后台留言。

matlab模块 python,Matlab 和Python结合使用相关推荐

  1. Julia与R/Python/MATLAB比较及Julia中的Text Analysis模块

    http://site.douban.com/146782/widget/notes/15468638/note/356127615/           上午等着R跑数,R是出了名的慢,特别是处理文 ...

  2. matlab 定义矩阵_MATLAB与Python,Mathematica由高维转化一维矩阵的方式的不同

    在进行数据处理的时候,我比较喜欢的数据存储方式是所有的数据都保存成MATLAB的".mat"文件,这种格式Python,Mathematica,MATLAB都会支持.不过在转化的时 ...

  3. python变量存为matlab,详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  4. python调用matlab环境配置、非常详细!!!_[python][matlab]使用python调用matlab程序

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

  5. python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎

    问题来源 笔者曾经在python34上安装matlab接口,当时使用的版本为matlab 2015b,众所周知,2015年还没发行py36,所以只能支持到py34.这种不兼容有两种解决办法,你可以通过 ...

  6. LQR轨迹跟踪算法Python/Matlab算法实现_代码(2)

    本文根据LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导(2)使用代码实现,进行仿真: clc clear allKp = 1.0 ; dt =0.1 ;% [s] L = ...

  7. LQR轨迹跟踪算法Python/Matlab算法实现2

    这里对上一篇LQR轨迹跟踪算法Python/Matlab算法实现进行勘误: clc clear allKp = 1.0 ; dt = 0.1 ;% [s] L = 2.9 ;% [m] wheel b ...

  8. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导

    对于文章 LQR轨迹跟踪算法Python/Matlab算法实现中的LQR推导的问题,我简单写了一下手稿,不高兴做成公式了:

  9. Stanley轨迹跟踪算法Python/Matlab算法实现

    本文针对Python/Matlab实现Stanley进行介绍: Stanley 的数学几何原理来自: https://blog.csdn.net/gophae/article/details/1000 ...

最新文章

  1. Computer:现代计算机操作系统的四大基本特性(并发/共享/虚拟/异步)
  2. RGB ECT 4BIT 压缩后质量远高于RGB ETC2 4BIT
  3. c++ 中pair类模板的用法详解
  4. 2013\Province_C_C++_A\4.颠倒的价牌
  5. mysql中索引类型索引方法_MYSQL索引的类型和索引的方式
  6. openwrt固件_openwrt固件
  7. 鸿蒙硬件HI3861开发环境搭建
  8. Layout 和 Menu【转】
  9. Swing 线程之SwingUtilities.invokeLater()
  10. 顶岗实习周记java方向_java软件开发——顶岗实习周记25篇
  11. java sql 格式化_IDEA 格式化SQL代码技巧分享
  12. gRPC Mock Server
  13. Biztalk AS2开发经验总结
  14. HTML-用css样式定义div的边框样式
  15. HyperLedger Fabric - 超级账本(2.2)启动网络 - 手动
  16. android wps 连接wifi密码,怎样在不知道密码的情况下连接WiFi?
  17. flutter flutter_swiper自定义指示器
  18. 天涯网站跨站漏洞(ALLyeSNO)
  19. Python 数据分析微专业课程--项目08 中国姓氏排行研究
  20. 大前端 - nodejs -egg实战 - web端(vue3.0)

热门文章

  1. java jdbc 链接pg_Java零基础教程
  2. 服务器重装ie浏览器,服务器内部IE浏览器或相关软件访问支付宝异常问题解决方案...
  3. java连接weblogic_java学习:weblogic下JNDI及JDBC连接测试(weblogic环境)
  4. linux系统怎么关闭usb端口,linux系统挂载以及卸载USB接口的设备的解决办法
  5. 为什么华为在发布会不提鸿蒙,华为又要开发布会?这次没有手机,鸿蒙系统要当主角!...
  6. php创建view,GitHub - houdunwang/laravel-view: Laravel 视图组件生成器
  7. php addslashes 数组,用递归addslashes函数转义数组
  8. 还不知道事务消息吗?这篇文章带你全面扫盲
  9. 小学计算机课总目标,小学信息技术课堂教学目标的确定与实现
  10. c语言数组最大元调换,c语言数组元素交换有关问题,请高手过来看看