学生休息室

分享学生如何在日常项目中使用Matlab和Simulink的技术和现实生活示例#studentsuccess金宝app

同时使用MATLAB和Python

今天的博客是由Heather Gorr,Matlab的产品营销和Mathworks的教育营销所写的。在这个博客中,他们分享了一些重要提示,帮助您将Matlab和Python一起使用。

你以前听说过,MATLAB vs. Python (vs. R vs. ),但我们将一起讨论使用MATLAB和Python !(它可以发生!和它!)如果你是一名学生,在学术界工作,或者在行业工作,你可能遇到过需要使用一种以上语言来完成工作的情况。这在工程和科学应用中很常见,特别是当它们涉及多个团队和硬件需求时。这样的合作帮助了研究人员麻省理工学院CSAIL.利用MATLAB和c++的优势一起检测肉眼无法察觉的颜色和运动变化。

有一个大型的社区正在用两种语言研究很酷的算法、教学和分享例子——所以为什么不利用所有这些出色的工作,独立于语言偏好!例如,我们使用MATLAB和Python来构建这个空气质量预测应用情绪分析算法.这两种语言经常在人工智能应用程序中同时使用(如此频繁,以至于深度学习网络通过直接输入和输出)马铃薯onnx.TensorFlow).

这个博客将向你展示如何一起使用MATLAB和Python(和平和谐地)。我们将假设初学者水平的背景在两种语言,并提供链接到更高级的主题。

基础知识

首先,让我们先解决需求问题。我们需要最新版本的Python和MATLAB R2014b或更高版本(听起来是升级到R2020a的好时机!)检查这里用于版本细节。

这可能听起来很明显,但我们还会确保Matlab和Python都可以访问我们的代码。可以从两种语言轻松更新路径。

从MATLAB调用Python

在深入研究之前,让我们确认一下MATLAB可以找到Python解释器。我们可以在MATLAB中用pyenv功能:

可执行文件:"C:\Python36\WPy-3670\python-3.6.7.amd64\python.EXE" Library: "C:\Python36\WPy-3670\python-3.6.7.amd64\ Python36 .dll" Home: "C:\Python36\WPy-3670\python-3.6.7.amd64\ Python36 .dll" Home: "C:\Python36\WPy-3670\ Python36 .dll"amd64" Status: Loaded ExecutionMode: OutOfProcess ProcessID: "20980" ProcessName: "MATLABPyHost"

这将返回Python版本和环境设置,也可以通过pyenv函数。

现在我们可以访问Python了,让我们使用它吧!我们将试着√6从中的功能数学去图书馆找窍门。在Python中,我们这样称呼它:

>>>进口数学>>> MATH.SQRT(42)6.48074069840786

要在MATLAB中调用同一个Python函数,可以使用以下方法:

>> py.math.sqrt(42) ans = 6.480740698407860

我们使用格式长在Matlab和Python中显示相同的精度。

现在,我们来概括一下这个行为。Python模块和函数可以使用以下语法访问:

>> py。module_namefunction_name

用户定义的模块以同样的方式调用。例如,天气空气质量应用程序中的模块包括通过Web API读取给定位置的天气数据的功能:

>>数据= py.weather.get_current_weather(“波士顿”,“我们”,键)数据= Python dict,没有属性。{'coord':{'lon':-71.06,'lat':42.36},'天气':[{'ID':804,'main':'云','描述':'阴云云','图标':'04N'}],'Base':'站','Main':{'temp':53.2,'feels_like':34.9,'temp_min':51.01,'temp_max':55,'压力':1003,'湿度':46},'可见性':16093,'风':{'速度':26.4,'DEG':230,'古斯特':34.45},'云':{'全部':90},'dt': 1587342601, 'sys': {'type': 1, 'id': 3486, 'country': 'US', 'sunrise': 1587290159, 'sunset': 1587339006}, 'timezone': -14400, 'id': 4930956, 'name': 'Boston', 'cod': 200}

请注意,输出是Python字典(在MATLAB中!)我们可以将此转换为MATLAB类型(更多信息到来),但现在我们将继续直接与其一起工作。让我们从模块中使用另一个功能来删除感兴趣的信息:

>> weatherData = py.weather.parse_current_json(data) data =不带属性的Python dict。{“feels_like”“临时”:39.31:31.44,“temp_min”:37岁“temp_max”:41岁的“压力”:1010年,“湿度”:80年,“速度”:8.05,“度”:340年,“城市”:“波士顿”、“纬度”:42.36,经度:-71.06,“当前时间”:“2020-04-18 20:48:00.985146”}

我们还可以在字典中建立索引来检索特定的值:

>> T = weatherData{"temp"} T = 39.3100

请注意,我们使用了Crly括号{}而不是括号()。在MATLAB中,在访问来自单元阵列和表等异构数据类型的异构数据类型访问值时通常使用了花束括号。一个简单的方法是要记住的是当您使用()时,您可以获得相同类型的更大数据集的子集。或表格。Conversely, if you use {}, you get the indexed value in its original data type i.e. double, string, char etc. Therefore, in the above example, a dict is a heterogenous data type and we will use {} to get the temperature value as a double. This例子显示对Python字典的索引。

现在我们已经了解了语法的概念,让我们讨论调用函数的另一个区别。假设我们想改变天气数据的单位。在Python中,get_forecast函数接受标准Python关键字参数,如下参数所示:

>>> forecast = weather.get_forecast("Boston","US",key,units="metric")

在MATLAB中,这些被传递为名称 - 值对Pyargs.功能:

>>预测= Py.Weather.Get_Forecast(“波士顿”,“我们”,键,Pyargs(“单位”,“公制”)

现在我们已经了解了如何适应Python语法并从MATLAB中调用函数。让我们反过来试试!?

从Python调用MATLAB

Python的Matlab引擎API使MATLAB称为计算引擎,因此我们可以使用Python的最喜欢的MATLAB函数。首先,我们需要通过Matlab附带的Python包安装它。在OS提示符中执行以下命令:

$ cd”matlabroot/extern/engines/python

matlabroot是MATLAB安装的目录(通过调用>>matlabroot在matlab)。检查DOC页面有关设置的更多信息。

让我们走到有趣的部分!要从Python调用matlab函数,首次导入并启动引擎(如果已经有一个,我们也可以使用当前的Matlab会话运行):

> > >导入matlab。Engine >>> eng = matlab.engine.start_matlab()

现在发动机正在运行,让我们调用Square Root函数:

>>> x = engl .sqrt(42.0) 6.48074069840786

注意,我们调用√642.0且不仅仅是42.留意,以了解为什么这在下一节中很重要。

MATLAB函数是用它们的原生语法调用的,但是有一些明显的区别。一个不同之处在于捕获多个输出的方式。例如,在情绪分析算法, MATLAB代码返回情感和分数的多个输出。我们需要指定使用的输出数量nargout

>>>[情绪,分数]= engl . sentimentanalysis (text,nargout=2) Positive [[0.0,0.510948896408081,0.48905110359191895]

同样地,如果MATLAB函数返回任何输出(例如,函数写入文件的结果),则需要通过nargout = 0.

当我们完成时,我们应该停止MATLAB引擎来释放系统资源:

> > > eng.exit ()

要调用matlab运算符(如着名的反斜杠运算符“\”来解决方程线性系统),我们需要使用函数名称(莫德利维).这是完整的清单Matlab运算符和相关功能

转换数据类型

当我们叫√6早些时候,我们在Matlab中使用了42位,但在Python中42.0。为什么差异?

打字42.在Python中返回Double在Matlab和一个整数中。我们的方块示例会出错而不使用转换函数浮子(42)或打字42.0由于MATLAB的√6接受单、双或复杂类型。

>>> eng.sqrt(42.0) 6.48074069840786 >>> eng.sqrt(float(42)) 6.48074069840786

我们还可以使用MATLAB中的整数和其他类型转换功能(如下表所示)到Python函数的传递预期类型。

它处理了输入,但输出呢?我们已经看过一些例子了:在MATLAB中,√6返回一个double,但函数天气返回Python字典对象。那么,到底发生了什么?在可能的情况下,函数输出将用该语言中的适当类型表示。否则,可以将数据转换为适当的类型。

下表显示了通用数据类型的映射(在医生).

表格

一些专门的MATLAB数据类型如时间表分类将需要一些额外的爱,需要手动转换。当然,我们仍然可以在函数中使用这些数据类型,但是函数需要返回Python解释器能够理解的类型。

表格

担心所有这些数据在MATLAB和Python之间的传递和转换吗?这些问题通常可以通过提前计划来避免。例如,在情绪分析算法音频数据被导入为整数(而不是默认的双精度),然后直接传递给Python函数。

使用文件传输数据也是很常见的,特别是在跨团队和语言协作时。如果我们的数据是表格式的,我们可以使用Apache Parquet在两种语言之间传输数据。MATLAB使用Apache箭头有效地读取和写入木质地块。我们可以阅读数据,执行计算,并从多种支持的语言中将数据写入地形数据。金宝app

图表

这是处理较大数据集的常见管道,可以帮助避免复制和转换时的额外开销。检查文档页面有关如何在MATLAB中读取和写入镶嵌文件的更多信息。

错误处理

到目前为止,我们已经讨论了如何避免错误,但让我们现实一点。即使是最优秀的人也会发生错误,解释错误信息是一项有价值的技能。有一些很好的关于常见问题的故障排除的文档页面,例如Matlab的Python错误来自Python的Matlab错误

我们可以花一整天的时间来学习如何读取错误消息,但这里最有用的课程将是如何判断错误是来自MATLAB还是Python。如果我们查看错误消息,我们将看到错误起源于何处的指示。

我们叫√6再次使用错误的数据类型:

>> py.math.sqrt(“42”)python错误:typeerror:必须是实数,而不是str

在Matlab,我们看到了Python的错误在行的开头,然后从Python提出的错误,这使得调试更容易!Matlab已捕获Python异常,并将其作为包含相同消息的Matlab异常。

让我们从Python做同样的事情:

>>> eng.sqrt("42") Traceback(最近的调用last):…未定义函数'sqrt'的输入参数类型'char'。

这里的Python追溯到这里最小化,但如果我们看最后一行,我们会看到matlabexecutionerror.和matlab错误消息。抓住MATLAB异常并将其重新培养为具有相同消息的Python异常。

我们保持简单,但有更复杂的方法来捕获异常,这对于测试和应用程序共享有用。查看更多信息这里

从MATLAB代码创建Python软件包

到目前为止,我们已经谈到了使用来自Python的Matlab,反之亦然,但我们在同一台机器上假设安装。我们如何与未安装MATLAB的人分享我们的工作?Matlab Compiler SDK将让我们包装MATLAB代码并以其他语言支持要从Python(或Java,C / 金宝appC ++等)的文件,并使用运行时执行。还提供了一个应用程序来帮助步行流程并生成必要的文件。

空气质量预测示例使用这个过程从MATLAB预测函数创建一个Python包,predictAirQual.m.我们可以使用Library Compiler应用程序并选择要包含的函数(依赖项会自动检测到)。

屏幕截图软件

这将打包我们需要的文件并创建setup.py.Readme.txt.文件有Python步骤的指令。

要在Python中调用此功能,有一个类似于Matlab引擎API的过程的安装步骤(指令这里),使用生成的setup.py.文件。

然后我们需要导入并初始化包,可以调用函数,如:

>>>进口AIRQUAL >>> AQ = AIRQUAL.INITIALIZE()>>>结果= aq.predictairqual()

当我们完成时,结束这个过程:

>>> aq.termate()

空气质量的例子更进一步地分享了MATLAB功能,以便在web界面中使用(并可能被许多用户同时访问)。在这种情况下,MATLAB生产服务器可用于负载平衡,可以通过a访问MATLAB代码RESTful APIPython客户端

除了分享更多资源并括起来,我们不会进一步进一步。空气质量和情感分析示例很高兴看到Matlab和Python如何为令人惊叹的事情一起使用Matlab和Python!我们还创建了使用Seatisiment示例来创建短视频来调用来自Matlab的Python.并打电话来自Python的Matlab..还有一个视频讨论了以上所有的视频空气质量例子

希望现在你意识到你不需要挑选最爱;您可以一起使用Matlab和Python!当我们希望您喜欢阅读并发现此博客有用。我们很乐意听到您正在努力的内容以及您拥有的任何问题!评论以下或通过您首选的社交媒体平台。?

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击这里登录您的MathWorks帐户或创建新的。