学生休息室

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

同时使用MATLAB和Python

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

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

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

这个博客将向你展示如何一起使用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中,我们这样称呼它:

>>> 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},“云”:{'all': 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

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

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

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

在MATLAB中,这些参数以名值对的形式传递pyargs功能:

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

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

从Python调用MATLAB

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

$ cd”matlabroot/extern/engines/python

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

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

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

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

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

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

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

>>>[情绪,分数]= engl . 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之间的传递和转换吗?这些问题通常可以通过提前计划来避免。例如,在情绪分析算法音频数据被导入为整数(而不是默认的双精度),然后直接传递给Python函数。

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

图

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

错误处理

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

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

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

>> Python .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、金宝appC/ c++等)调用,并使用运行时执行。还提供了一个应用程序来帮助完成整个过程并生成必要的文件。

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

屏幕截图软件

这将打包我们需要的文件并创建setup . py固定文件中包含Python步骤的说明。

要在Python中调用它,需要一个类似于MATLAB Engine 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帐户或创建一个新帐户。