Python与Matlab的比较

26

我考虑从MATLAB转换到Python。 应用程序是量化交易,成本并不是真正的问题。 我喜欢MATLAB的一些东西,想知道Python如何比较(在我读过的评论中找不到答案)。

  1. 是否有适用于Python的IDE与MATLAB一样好(变量编辑器、调试器、分析器)?我读过关于Spyder的好评,但它有分析器吗?

  2. 当您在MATLAB上更改路径上的函数时,它会自动重新加载。 在更改库时,您是否必须手动重新导入库,或者可以自动完成? 这是一个小问题,但实际上极大地提高了我的生产力。


ad 2: 是的 - Sven Marnach
Matlab是一种数学编程接口,也非常快速。这与Python非常相似,只不过Matlab比Python更快。使用Matlab的好处在于,使用图形绘制不同的图表更容易。在执行Python程序后,输出会被打印或保存,但在Matlab中,数据仍然被保存,并且可以解决程序中的错误,重新运行该部分可以从那一行开始,而不必重新启动数小时的模拟和测试。并且,我不会写出始终100%正确的代码。 - Martijn van Wezel
@Martijn 嗯...在Python中,您也可以交互式地运行代码,只运行您想要的行并进行更改。 - Antonello
@Antonello 我没有看到任何好的例子。我使用Matlab的主要原因是它对我来说是免费的,没有库混乱(和symbolab)。 - Martijn van Wezel
@MartijnvanWezel 可以使用Python IDE,选择要运行的代码并从菜单中选择“运行块”或类似选项。如果你不喜欢Python需要安装外部库来进行数值计算,那么你可能会喜欢Julia(使用Juno IDE),它很快速,核心已经包含了进行数值计算所需的所有东西,而且语法非常类似于Matlab(参见此抽认表)。 - Antonello
11个回答

20

IDE: 不行。Python的集成开发环境还远远达不到MATLAB那样好用和成熟,虽然我听说过Wing IDE很不错。一般来说,我觉得使用IDE进行Python开发完全是杀鸡焉用牛刀,而且我发现如果使用一个良好配置的文本编辑器(我的选择是vim)和一个单独的可视化调试器(WinPDB),我会更加高效。

修改函数:模块必须在更改后使用reload()内置函数重新加载。

import foo
#now you've changed foo.py and want to reload it
foo = reload(foo)

我已经从MATLAB转向Python,因为我发现Python在处理复杂性方面做得更好,也就是说,我发现在Python中编写、调试和维护复杂代码更容易。其中一个原因是Python是一种通用语言,而不是专门的矩阵操作语言。由于这个原因,像字符串、非数字数组以及(至关重要的)关联数组(或映射或字典)和类一样,在Python中构成了一流结构。

就功能而言,使用NumPy、SciPy和Matplotlib,几乎可以在MATLAB提供的所有功能上进行工作,以及很多需要购买单独工具箱的东西。


9
PyCharm很棒,我没有使用过Matlab所以无法比较这两者,但你尝试过使用PyCharm吗? - lukecampbell
1
PyDev是一款优秀的集成开发环境。PyCharm也不错。 - Boris Gorelik
4
我认为Spyder比Wing更适合作为Matlab的替代品。 - endolith
2
更正我的上一条评论,vim比它们所有的都好得多。PyCharm只是在重构方法方面做得很好。 - lukecampbell
我个人喜欢PyDev + vwrapper。它是两全其美的选择——在完整的IDE中进行类似于vim的编辑。 - dhj
Visual Studio 2017内置了对Python的支持!太棒了。Visual Studio 2017专业版也是免费的! - TraceKira

12

我一直很喜欢在Python(x,y)套件中使用Spyder IDE。作为Matlab的长期用户,我大约10年前就知道了Python的存在,但仅自从我安装了Python(x,y)以来,我才开始经常使用Python。


8

你可能还想查看以下帖子中的一些答案,虽然它们没有解决你的两个主要问题:

我应该转到Python吗?

我也是从Matlab彻底转换过来的:

  1. 我还没有使用全功能的Python IDE,但在IPython中与Matplotlib、Numpy、Scipy等相结合使用效果很好。我实际上使用了Enthough Python Distribution,它预装了我需要的大多数科学/量化包。我还听说过Python(x,y)和Sage。

  2. 也许其他IDE可以处理这个问题,但在IPython中我使用autoreload,这个功能工作得相当不错。

正如其他人所提到的,由于数值/量化库已经成为Python的组成部分,而不是在其之上构建一个数值库,因此您拥有了与Matlab所没有的极高灵活性。此外,特别是在数值/量化领域,Python社区真的非常出色。


我很好奇 - 你指的是什么样的灵活性?你能举个例子吗? - SCFrench
4
@SCFrench(无意冒犯您的雇主 - 在我的研究生阶段,Matlab对我很有用),但在我看来,Python因为是一种完整的开源编程语言,所以在以下方面做得更好:(1)面向对象编程 - 当我使用Matlab时,最新版本可能已经改进了,但我使用的实现留下了许多遗憾。(2)字符串处理(3)可以在任何平台/机器上自由运行/分发 - 这对我来说是最大的灵活性问题。这只是部分列表,我承认Matlab具有高度的能力和一些不错的特性,但我从事的项目使我成为了一个转换者。 - JoshAdel
我并不想引发争论或什么的,我真的很感兴趣了解如何改进MATLAB。谢谢你提供的信息! - SCFrench

6
我已经在工程领域工作了一段时间,一直使用MATLAB进行高复杂度数学计算。我并没有遇到太大的问题,但也没有特别热衷于使用它。几个月前,我发现自己将成为一个数值方法课程的助教,并且该课程将使用Python进行教学,所以我必须学习这门语言。
起初我认为这会是额外的工作量,但结果却是一个很棒的爱好。我无法形容MATLAB相比Python有多糟糕!在MATLAB中需要我整天编写的代码,在Python中只需要几个小时就能完成。我的代码看起来也更加吸引人。Python的性能和灵活性真正让我惊讶。使用Python,我可以做任何我曾经在MATLAB中做过的事情,而且做得更好。
如果其他人正在考虑切换,我建议你们这样做。我引用“Python Scripting for Computational Science”的话,因为他们比我更好地描述了Python优于MATLAB的优点:
  • Python编程语言更强大
  • Python环境完全开放,可与外部工具集成
  • 一个完整的工具箱/模块可以包含在单个文件中(与一堆M文件相比)
  • 将函数作为参数传递给函数更简单
  • 嵌套的异构数据结构易于构建和使用
  • 面向对象编程更方便
  • C、C++和Fortran代码的接口支持更好,因此更简单
  • 标量函数在更大程度上与数组参数一起工作(无需修改算术运算符)
  • 源代码是免费的,并且可以在更多的平台上运行。

3

我们使用Wing IDE进行Python开发。它功能齐全,集成了调试支持,并且可以连接到您选择的分析器。

关于(2),我知道你指的是什么,因为我也从Lisp中错过了同样的功能,据我所知,在更改库后,您需要主动重新导入它们。不过这并不是真正的障碍,因为您可以轻松编写一个小函数(一次性),为您关心的每个模块执行该操作,然后将该函数放在快捷键上,这样您只需按下CTRL-T即可更改代码后实现。


2

这个问题是在2011年提出的。

最近,在2013年中期,我完全转向了Python,主要是因为类似于Matlab的Spyder IDE以及整个Scientific Python和IDE环境的一体化安装程序的可用性。

PythonXY(仅限Windows)和Continuum Analytics' Anaconda(Mac / Win / Linux)可以让您快速启动,并在类似于Matlab的IDE(Spyder)中运行,具有变量检查器,文件浏览器,对象检查器(显示您键入的函数的实时帮助)等等。现在它已经成为我完整的Matlab替代品。


2
几乎所有东西都被其他人覆盖了..我希望你不需要像优化工具箱、神经网络等工具箱..[我没有在Python中找到这些,也许有一些..但我严重怀疑它们可能比Matlab的更好..]
如果您不需要符号操作功能并且使用Windows,则可以使用Python(x,y)[他们在Linux端上没有太多活动(旧版本可用)] (或者需要一些较小的符号操作,请使用sympy,我认为它随着EPD和Python(x,y)的超越/整合而来)
如果您需要符号能力,则Sage是正确的选择,在我看来,Sage与Matlab以及Mathematica一样出色。
我也在尝试转换...(需要我的工程项目)
希望能对您有所帮助。

2
scipy拥有一个相当全面的优化工具包。请访问http://docs.scipy.org/doc/scipy/reference/optimize.html获取详细的参考文档。 - Chinmay Kanchi
3
有几个Python的神经网络库,例如http://pybrain.org/。我不知道它们和Matlab工具包相比如何,但是(1)它们是免费的,(2)我不会轻易忽略它们,因为有很多非常聪明的人在开发这些项目。 - JoshAdel
对不起,如果我的语气不够清晰,我并不打算否定任何人......(我希望它们比现有的更好)学习特定的工具箱,了解它如何工作以及如何处理各种情况是一项巨大的投资。我使用了Matlab的神经网络工具箱做了一些好的工作(我所在的研究所有几个许可证...我不用担心金钱问题!),我对nnet工具箱的速度和可靠性非常满意。我在忙碌的学期中同时完成了这个小项目,所以底线是我有点偏见。 - fedvasu

2
有人会从MATLAB转换到Python,因为Python更擅长处理复杂性,即编写、调试和维护复杂代码更容易。其中一个很好的原因是,Python是一种通用语言,而不是矩阵操作语言。因此,非数字数组、字符串和关联数组等实体在Python中是一流的构造。
我们经常听说有人和整个研究小组从MATLAB转向Python。科学Python生态系统正在快速成熟,Python是一种吸引人的替代方案,因为它是免费的、开源的,并且越来越强大。让我们详细探讨它们。
Matlab和Python的生态系统
Python是一种编程语言。最常见的实现方式是C语言,也称为CPython,通常被称为Python。除了编程语言和解释器之外,Python还包括一个广泛的标准库。这个库旨在进行一般编程,并包含用于操作系统特定内容、线程、网络、数据库等模块。
Matlab是一种商业数值计算环境和编程语言。Matlab的概念涵盖了整个套件,包括IDE。标准库中不包含太多通用编程功能,但包括矩阵代数和广泛的数据处理和绘图库。为了获得额外的功能,Mathworks提供了工具包(但需要额外付费)。
在Python中进行科学计算,需要额外的软件包(例如NumpyScipyMatplotlib)。此外,你需要一个集成开发环境(IDE)。许多Python程序员来自Linux环境,使用Python shell和编辑器(如vi或Emacs),但从Matlab过来的人更喜欢功能丰富的IDE。现在有很多方便而强大的Python IDE可供选择,例如PyCharmSpyderJupyter Notebook等。

Python软件包由不同(但通常重叠)的一群人开发,他们也是软件包的用户。许多软件包可用于不同的目的。在这个开源生态系统中,大多数软件包都由少数核心开发人员推动,但许多软件包的用户通过报告问题、帮助文档和对代码进行小改进来促进开发。


Matlab的优点

让我们来看看从Matlab中可以得到哪些优势:

  • 它拥有大量的功能。 Simulink是一个没有好的替代品的产品。
  • 对于初学者来说可能更容易,因为该软件包包含了所有必要的内容,而在Python中您需要安装额外的软件包和IDE。
  • 它拥有庞大的科学社区;它被许多大学所使用(尽管很少有公司有足够的资金购买许可证)。

Matlab的问题

在这里,我们并不打算抹黑Matlab。我自己曾经也很喜欢Matlab。然而,我认为Matlab存在一些根本性的缺点。其中大多数是由其商业性质引起的:

  • 算法是专有的,这意味着您无法查看您正在使用的大多数算法的代码,并且必须相信它们被正确实现。

  • Matlab相当昂贵,这意味着只有具备足够资金购买许可证的人才能使用用Matlab编写的代码。

  • 自然地,Mathworks对代码可移植性进行了限制,即在他人的计算机上运行您的代码的能力。您可以使用Matlab Component Runtime (MCR)运行已编译的应用程序,但是您的便携式应用程序必须完全匹配已安装的MCR版本,考虑到Matlab每6个月发布一个新版本,这可能会带来麻烦。

  • 专有的性质还使第三方难以扩展Matlab的功能。

此外,还有一些其他问题源于Matlab作为一个矩阵操作包的起源:

分号。在控制台中输入代码时,使用分号可以显示结果,但在脚本中,为了抑制输出,必须以分号结束一行是没有意义的。 索引使用花括号而不是方括号进行,这使得很难将其与函数调用区分开来。

Python的优势

Python语言在软件开发公司中有着多元化的应用,例如游戏开发、Web框架和应用程序、语言开发、原型设计、图形设计应用等。这使得该语言比其他行业使用的编程语言更具优势。在了解Python的一些优势之前,请先快速浏览此处。现在让我们看看它的一些优点-

  • 广泛的支持库

    它提供了大量的标准库,包括字符串操作、互联网、Web服务工具、操作系统接口和协议等领域。其中大部分常用的编程任务已经被脚本化,这限制了在Python中编写代码的长度。

  • 集成功能

    Python集成了企业应用程序集成,使得通过调用COM或COBRA组件来开发Web服务变得容易。它具有强大的控制能力,因为它可以直接通过C、C++或Java通过Jython进行调用。Python还处理XML和其他标记语言,因为它可以在所有现代操作系统上通过相同的字节码运行。

  • 提高程序员的生产率

    该语言具有广泛的支持库和清晰的面向对象设计,使用类似Java、VB、Perl、C、C++和C#等语言时,程序员的生产率可以提高两到十倍。

  • 生产力

    由于其强大的过程集成功能、单元测试框架和增强的控制能力,大多数应用程序的速度和生产力都得到了提高。它是构建可扩展的多协议网络应用程序的绝佳选择。


Python的缺点
Python具有各种优点,程序员喜欢这种语言而不是其他编程语言,因为它易于学习和编码。然而,在某些计算领域中,例如企业开发商店,这种语言仍未占据一席之地。因此,这种语言可能无法解决一些企业解决方案,其限制包括:
  • 使用其他语言时存在困难

    Python 爱好者对其特性和广泛的库非常习惯,因此在学习或使用其他编程语言时会遇到问题。Python 专家可能会认为声明转换值或变量类型、添加大括号或分号的语法要求是繁琐的任务。

  • 移动计算能力较弱

    Python 已经在许多桌面和服务器平台上存在,但在移动计算方面被认为是一种较弱的语言。这就是为什么很少有基于 Python 构建的移动应用程序,例如 Carbonnelle。

  • 速度较慢

    Python 依靠解释器执行,而不是编译器,这导致它速度较慢,因为编译和执行帮助它正常工作。另一方面,它也可以看作是许多 Web 应用程序的快速实现。

  • 运行时错误

    Python 语言是动态类型的,因此它有许多设计限制,这些限制被一些 Python 开发人员报告。甚至可以看到它需要更多的测试时间,并且错误最终在应用程序运行时显示。

  • 未完善的数据库访问层

    与流行技术如 JDBC 和 ODBC 相比,Python 的数据库访问层被认为是有些不完善和原始的。然而,在需要复杂遗留数据平稳交互的企业中,它无法应用。


Python相对于Matlab的优势
Python代码比Matlab代码更紧凑,更易于阅读。 1. 与以end语句表示块结束的Matlab不同,Python基于缩进确定块大小。 2. Python使用方括号进行索引和圆括号进行函数和方法调用,而Matlab在这两个方面都使用圆括号,这使得Matlab更难区分和理解。 3. Python更好的可读性导致较少的错误和更快的调试。 Matlab使用基于1的索引,而大多数编程语言(包括Python)使用基于0的索引,这使得Matlab对用户来说更加困惑。 Python的面向对象编程(OOP)简单灵活,而Matlab的OOP方案复杂混乱。 Python是自由开放的。 1. 虽然Python是开源编程,但大部分Matlab是闭源的。 2. Python的开发者鼓励用户为软件提供建议,而Matlab的开发者没有这样的交互。 3. Python提供了更广泛的图形包和工具集选择。
使用NumPy、SciPy和Matplotlib,你几乎可以获得MATLAB提供的整套功能,并且还有很多需要购买单独工具箱才能得到的东西。
然而,MatLab社区有他们自己选择Matlab或Python的理由(是的,真的)。不过这篇文章很值得一读。

你的一些参数是错误的。 "添加花括号或分号的语法要求" 我发现很难记得在 for 语句的末尾添加冒号。 "Python 更好的可读性" 这取决于你习惯什么,它们都有时候会有晦涩的语法。 "Matlab 的开发人员没有提供这样的交互" 是的,他们提供了。此外,购买许可证可以获得客户支持。 [续] - Cris Luengo
“Python的import语句在Matlab中没有对应的功能。” 实际上有,它被称为addpath。 “Python提供了更广泛的图形包和工具集选择。” MATLAB拥有最好的出版质量图形。 - Cris Luengo
@ChrisLuengo 一个强有力的声明,比如“软件X是最适合Y的”,必须有强有力的论据支持。您认为MATLAB具有哪些功能,使其能够产生比Matplotlib更高质量的图形? - Xukrao

2
经过长时间的尝试,我选择了Aptana IDE+IPython(包括网络浏览器中的notebook)。非常适合编辑,易于获取帮助,快速尝试新事物。
Aptana与Eclipse相同(因为有PyDev),但Aptana具有不同的配色主题和其他小功能,这些是Eclipse所缺乏的。
关于Python,请不要忘记Pandas。我认为它是数据分析的非常强大的工具,将来会变得更加强大。
我正在研究Matlab,在那里我看到了一些很棒的东西,特别是GUI界面和其他一些好玩的东西。但是Python给你带来了灵活性和便利。无论如何,您仍然需要学习Python、Matplotlib、NumPy(最终还要学习Pandas)的基础知识。
但从我所看到的来看,NumPy和Matplotlib与Matlab概念类似(可能是在创建时就考虑了Matlab)。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接