Python 比 MATLAB 好吗?
在这篇文章中,我们将探讨 Python 和 MATLAB 哪一个更好。尽管 Python 和 Matlab 在很多方面相似,但 Python 拥有许多显著的优势。
Python 代码通常比 Matlab 代码更简洁易读。
这有几个原因,包括:
与 Matlab 使用 `end` 语句作为闭包不同,Python 通过缩进确定代码块的范围(即表示代码块的结束)。因此,Python 程序员被迫缩进代码块,这通常是一个好习惯。与大多数其他编程语言不同,Python 程序员永远不会浪费时间去寻找丢失的 `end` 语句。
几乎所有编程语言(除了 Matlab)都使用方括号进行索引,使用圆括号进行函数和方法调用。Python 也如此。Matlab 两者都使用圆括号。在 Python 中,方括号对于索引的可读性至关重要,也简化了需要使用多种语言的程序员的工作。由于使用圆括号进行索引和函数调用,Matlab 代码可能难以理解,并且经常是问题的根源。
Python,像几乎所有其他编程语言(除了 Matlab)一样,使用零索引。
以 x 为一维数组为例。Python/NumPy 使用 x[0] 作为第一个元素,而不是 x[1]。Matlab 的一索引迫使实现者转换索引,这很麻烦,也是错误的来源,因为文献中几乎每种信号处理技术都使用从零开始的索引求和。
Python 对字典(哈希表)的支持非常好。
除了索引(键)不限于整数外,哈希表类似于数组。在编写编译器或解释器时,字典是创建符号表的一种自然而非常有效的方法。在工程和科学编程中,字典的重要性及其价值无法强调。但是,Matlab 强加了所有键必须是相同类型的无意义要求。Matlab 确实提供字典,有时称为哈希映射。
Python 的面向对象编程 (OOP) 简单而高效。
Python 的面向对象编程 (OOP) 简单而优雅,同时又提供了类似 C++ 的功能和灵活性。Matlab 的面向对象编程方法复杂且过于冗长。以下是 Matlab 官方文档中的一个例子:
当一个子类从多个类派生时,声明的超类指定的所有属性、方法和事件都将传递给子类。如果多个超类在相同名称下定义了相同的属性、方法或事件,则必须明确解决所有定义。如果两个或多个超类在相同名称下声明了相同的属性,则必须满足以下要求之一:
对于所有属性或除一个属性外的所有属性,`SetAccess` 和 `GetAccess` 属性都必须设置为私有。
这些属性在所有超类中具有相同的定义(例如,当所有超类都从公共基类继承该属性时)。
你理解了吗?由于 Matlab 类必须在单独的类定义文件中指定,因此也很难在不更改 Matlab 路径的情况下保留同一类的不同迭代。
Python 是免费和开放的。
Python 是开源的,因此始终可以查看内部以了解事情是如何完成的。另一方面,Matlab 主要是非开源和专有的,在某些情况下,甚至算法也是专有的(Simulink,Matlab 的仿真工具箱,包含一个专有的调度算法)。
每个 Matlab 工具箱都必须单独购买,而 Matlab 许可证相当昂贵。另一方面,Python 是开源且免费的。创建包含良好选择的库的 Python 版本可能具有挑战性,但有高质量的发行版包含 NumPy、SciPy、IPython(交互式 shell)、matplotlib 和许多其他重要库。两个非常有用的免费版本如下:
Enthought Canopy 发行版
Continuum Analytics 的 Anaconda Python 发行版
从另一个意义上说,Python 社区是开放的。几乎每个 Python 方面都有一个活跃的、建设性的公开讨论,任何想要参与的人都可贡献他们的想法。
任何数量的函数都可以捆绑在一个文件中(模块)
根据 MathWorks 的说法,MATLAB 程序文件可以包含各种任务的代码。主函数(文件中的第一个函数)可从命令行访问,并且对其他文件中的函数可见。局部函数是由文件执行的额外操作。只有同一文件中的其他函数才能看到局部函数。
从事复杂基于 Matlab 的项目的开发者通常会被大量的小文件淹没,因为局部函数只能在其编写的文件中访问。
Python 的导入语句
Matlab 中没有 Python 中使用的导入语句。(Matlab 搜索 Matlab 路径(一个目录列表)以解析对既不是内置函数也不是在同一文件中提供的函数的引用。)当 Matlab 源代码文件的名称和文件的主(起始)函数名称不同时,文件名优先于代码中出现的函数名。由于这两个设计缺陷,不可能创建单个函数的多个迭代,而不为它们提供唯一的名称或经常更改 Matlab 路径。当将大型 Matlab 程序分解成多个文件时,这些文件的位置至关重要,并且必须与 Matlab 路径一致。
共享库升级后,有三种可能性:
让所有开发人员“步调一致”升级到最新版本。
必须修改新(或旧)版本用户的 Matlab 路径。(如果同一个人在不同的应用程序中同时使用旧库和新库,这就会出现问题。)
一个版本的使用者根据另一个版本提供的不同名称修改他们的代码。
Python 允许你将类和函数组织成模块和包,任何名称冲突都通过模块或包的名称来解决。Python 的导入语句使程序员可以完全控制使用哪些组件。
Python 提供更多图形包和工具的选择
Matplotlib 生成的高质量非交互式二维和三维图形对于大多数工程和科学图形来说已经足够了。与 Matlab 相比,Python 和 matplotlib 需要更少的调整即可生成可供发布的输出。
可以使用 Qt、Traits 和 Wx 创建图形用户界面。(Wx 正在逐渐被淘汰。)
Chaco 有一个用于创建交互式图形的 API。
结论
在本文中,我们深入了解了为什么 Python 比 Matlab 更好的信息。