学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实例子#学生成功#金宝app

结合MATLAB和Python

今天的博客由MATLAB产品营销部门的Heather Gorr和MathWorks教育营销部门的Deepak Bhatia共同撰写。在这个博客中,他们分享了一些重要的技巧,将帮助您一起使用MATLAB和Python。

你以前听说过MATLAB和Python (R和<插入任何其他语言>),但我们将讨论一起使用MATLAB和Python !(这可能发生!确实如此!)如果您是一名学生,在学术界或工业界工作,您可能遇到过需要集成来自多种语言的工作的情况。这在工程和科学应用中很常见,特别是当它们涉及多个团队和硬件需求时。这样的合作帮助了麻省理工学院的权力利用MATLAB和c++的优势,检测肉眼难以察觉的颜色和运动变化。

有一个很大的社区在用两种语言研究很酷的算法、教学和分享例子——所以为什么不利用所有这些优秀的工作呢,而不考虑语言偏好!例如,MATLAB和Python被用于构建这个空气质量预测应用程序情感分析算法.这两种语言经常一起用于人工智能应用程序(如此频繁,深度学习网络有直接的进口商和出口商MATLABONNX而且TensorFlow).

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

最基本的

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

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

从MATLAB调用Python

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

>> pyenv ans = PythonEnvironment with properties: Version: "3.6"可执行:"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"amd64" Status: Loaded ExecutionMode: OutOfProcess ProcessID: "20980" ProcessName: "MATLABPyHost"

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

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

>>> import math >>> math.sqrt(42) 6.48074069840786

要从MATLAB中调用相同的Python函数,我们可以使用以下方法:

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

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

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

> > py。module_namefunction_name

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

>> data = py.weather.get_current_weather("Boston","US",key) data = Python字典,没有属性。{“coord”:{“纬度”的经度:-71.06:42.36},“天气”:[{“id”:804年,“主要”:“云”、“描述”:“阴暗的云”,“图标”:“04 n”}],“基地”:“站”,“主要”:{“feels_like”“临时”:53.2:34.9,“temp_min”:51.01,“temp_max”:55岁,“压力”:1003年,“湿度”:46},“可见性”:16093年,“风”:{“速度”:26.4,“度”:230年,“阵风”:34.45},“云”:{“所有”:90},“dt”:1587342601,“sys”:{“类型”:1、“id”:3486年,“国家”:“我们”,“日出”:1587290159,“日落”:1587339006},“时区”:-14400年,“id”:4930956,“名字”:“波士顿”、“鳕鱼”:200}

注意,输出是一个Python字典(在MATLAB中!)我们可以将其转换为MATLAB类型(关于数据类型的更多内容将在后面介绍),但现在我们将继续直接使用它。让我们使用模块中的另一个函数来提取感兴趣的信息:

>> weatherData = py.weather.parse_current_json(data) data = Python字典,没有属性。{“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

注意,我们使用了花括号{}而不是圆括号()。在MATLAB中,当从单元格数组和表等异构数据类型中访问值时,经常使用花括号。一种简单的记忆方法是,当使用()时,您将获得相同类型的较大数据集的子集,即单元格数组或表。相反,如果你使用{},你得到的是原始数据类型的索引值,如double, string, char等。因此,在上面的例子中,dict是一种异构数据类型,我们将使用{}获取温度值作为双精度值。这例子显示对Python字典的索引。

现在我们已经了解了语法,让我们讨论调用函数的另一个不同之处。假设我们想改变天气数据的单位。在Python中,get_forecast函数接受标准的Python关键字参数,如这里最后一个参数所示:

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

在MATLAB中,它们作为名值对与pyargs功能:

>> forecast = py.weather.get_forecast("波士顿","美国",key,pyargs("单位","公制")

现在我们了解了如何适应Python语法和调用MATLAB函数。让我们用另一种方式试试!?

从Python调用MATLAB

Python的MATLAB引擎API允许调用MATLAB作为计算引擎,这样我们就可以从Python中使用我们最喜欢的MATLAB函数。首先,我们需要通过MATLAB附带的Python包安装它。在操作系统提示符下执行以下命令:

$ CD "matlabroot/extern/engines/python" $ python setup.py install . sh

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

让我们开始有趣的部分吧!要从Python调用MATLAB函数,首先导入并启动引擎(如果已经有MATLAB的当前会话,我们也可以使用它)运行):

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

现在引擎正在运行,让我们调用平方根函数:

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

注意,我们调用√6使用42.0函数,而不是简单的42函数。请继续关注,在下一节中了解为什么这很重要。

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

>>>[情感,分数]= eng.sentimentAnalysis(text,nargout=2) Positive [[0.0,0.510948896408081,0.48905110359191895]]

类似地,如果MATLAB函数没有返回输出(比如函数将结果写入文件),则需要传递nargout = 0

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

> > > eng.exit ()

要调用MATLAB操作符(如求解线性方程组的著名反斜杠操作符“\”),我们需要使用函数名(mldivide).这是完整的清单MATLAB算子及相关函数

转换数据类型

当我们打电话时√6之前,我们在MATLAB中使用42,而在Python中使用42.0。为什么会有这种差异?

打字42在MATLAB中返回一个双精度值,在Python中返回一个整数。如果不使用转换函数,我们的平方根示例就会出错浮动(42)或输入42.0由于MATLAB的√6接受单、双或复杂类型。

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

我们还可以在MATLAB中使用整数和其他类型转换函数(如下表所示)来将期望的类型传递给Python函数。

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

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

表格

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

表格

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

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

图

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

错误处理

到目前为止,我们已经讨论了如何避免错误,但让我们现实一点。我们中最优秀的人都会犯错误,解释错误信息是一项很有价值的技能。有一些很好的文档页面是关于常见问题的故障排除的,比如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(最近一次通话):…未定义的函数'sqrt'输入参数类型'char'。

Python回溯在这里被最小化了,但是如果我们看一下最后一行,我们会看到MatlabExecutionError和MATLAB错误信息。MATLAB异常被捕获,并作为带有相同消息的Python异常重新引发。

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

从MATLAB代码创建Python包

到目前为止,我们已经讨论了从Python使用MATLAB,反之亦然,但我们已经假设在同一台机器上安装了两者。我们如何与那些没有安装MATLAB的人分享我们的工作?MATLAB编译器SDK将允许我们将MATLAB代码和支持文件打包成其他语言,以便从Python(或Java, C/ c金宝app++等)调用并使用运行时执行。还提供了一个应用程序来帮助完成这个过程并生成必要的文件。

空气质素预测例子使用这个过程从MATLAB预测函数创建一个Python包,predictAirQual.m.我们可以使用库编译器应用程序并选择要包含的函数(依赖关系将自动检测)。

软件截图

这将打包我们需要的文件并创建一个setup . py而且固定带有Python步骤说明的文件。

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

然后我们需要导入和初始化包,并调用函数,如下所示:

>>> import AirQual >>> aq = AirQual.initialize() >>> result = aq.predictAirQual()

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

> > > aq.terminate ()

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

在这里,除了分享一些资源并总结之外,我们不会再深入讨论。空气质量和情感分析示例非常棒,可以了解MATLAB和Python如何以及为什么可以一起使用来实现令人惊叹的事情!我们还用情感电话的例子制作了短视频来自MATLAB的Python和调用MATLAB来自Python.还有一个视频讨论了以上所有的空气质素例子

希望现在你已经意识到你不需要选择最喜欢的;你可以一起使用MATLAB和Python !??我们希望你喜欢阅读并发现这个博客有用。我们很乐意听到你在做什么以及你有任何问题!请在下方或通过你喜欢的社交媒体平台发表评论。?

|
  • 打印
  • 发送电子邮件

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。