用Python替代Matlab
我是一名工程专业的学生,平时需要做很多数字处理、绘图、模拟等工作。目前我使用的工具是Matlab,在学校的电脑上完成大部分作业。不过,我想了解一下有哪些免费的选择。
我做了一些调查,很多人说Python在很多情况下可以替代Matlab。我想知道如何用Python来完成这些工作。我用的是Mac电脑,那么我该如何安装不同的Python包呢?那些包是什么?Python真的可以作为一个可行的替代方案吗?我用这个Python环境可以做哪些事情,又不能做哪些事情呢?
8 个回答
在用Python替代Matlab时,有三个方面需要考虑:核心语言能力、开发环境(IDE)和价格。
能力比较
这一部分列出了每个平台的所有能力。简单来说,Matlab能做的事情,Python也能做,而且Python能做的事情更多。不过,像线性代数和快速原型开发这些,Matlab做得更简洁。
Matlab
Matlab里的所有工具都是现成的,工具箱之间的整合也很顺畅。它的功能也更成熟,但它并不是为通用编程设计的,所以如果不是线性代数相关的东西,使用起来会比较麻烦。
- 工具箱:Matlab的工具箱非常好,而Python的实现往往难以与之竞争(即使是一些不太专业的东西,比如优化算法)。
- 线性代数:Matlab在处理线性代数方面的能力简洁明了,更容易阅读和理解。
- 可视化能力:有非常好的、广泛的可视化能力。
Python
要让Python成为一个好的Matlab替代品,需要额外安装一些模块。
- 通用编程:Python是一种真正的编程语言,提供了比Matlab更多的灵活性。
- Numpy:提供数组和线性代数的功能,但语法比Matlab稍微复杂。不过,我非常喜欢它的广播功能,再也不用担心
repmat
的麻烦了。 - SciPy:提供统计、优化和其他有用的数学功能。
- MatPlotLib:在我看来,它提供的图表质量比Matlab更高。此外,它的语法设计得与Matlab相似,所以上手应该比较容易。
- SymPy:一个很好的符号编程包。
IDE比较
在我看来,Python在这方面有所欠缺。我发现算法开发(尤其是涉及大量线性代数的)在Matlab的IDE中更轻松。
Matlab
作为工程学生,以下是一些Matlab的关键功能,缺少它们会很难受。需要注意的是,Python的IDE也有一些类似的功能,但实现得比较粗糙。
- 强大的调试功能:可以非常灵活地探索函数。Python也支持调试,但在IDE中的实现往往不够干净。
- 变量浏览器:Matlab有一个很好的变量浏览器,方便查看多种数据类型。有些Python的IDE在显示numpy数组时会遇到困难,这很烦人。
- 变量持久性:如果代码在运行时出错,变量仍然会保留,这有助于调试。此外,假设变量是持久的,连续运行不同的脚本也更容易。在Python中,你需要手动保存变量,才能在其他脚本中使用。
- 性能分析器:非常好用,可以帮助你找出算法的瓶颈。
- 命令行:可以在命令行中执行单行指令。Python在所有好的IDE中也完全支持这一点。
- 图形用户界面绘图工具:可以快速、轻松地从用户界面绘制结果和变量。大多数Python的IDE更倾向于软件开发,因此不支持这一点(不过sypder通过matplotlib有有限支持)。
- 文档:所有函数在IDE中都有本地文档。
Python
现在有一些新的Python IDE开始与Matlab的一些关键优势竞争。我个人喜欢PyCharm,它最近发布了免费的社区版。它具备以下功能,并且在用户界面设计上非常出色。
- 调试功能
- 变量浏览器
- 命令行
- 文档
价格比较
Python是免费的,并且有一个活跃的支持社区。Matlab也有一个不错的支持社区,但绝对不是免费的。
我编程用Matlab已经有大约15年了,用Python也有10年了。通常来说,选择这两种语言可以这样考虑:
如果你能满足以下条件:
- 你主要使用矩阵和矩阵运算
- 你有钱买Matlab的许可证
- 你在MathWorks支持的平台上工作
那么,毫无疑问,使用Matlab是个好选择。否则,如果你有其他数据结构,想要一个开源的选项,可以在不担心许可证的情况下交付解决方案,并且需要在MathWorks不支持的平台上开发,那就选择Python吧。
Matlab的语言有点笨重,但用户界面很流畅。Python的语言非常好,有迭代器、生成器和一些Matlab没有的函数式编程工具;不过,如果你不喜欢(或者不能使用)SAGE,你可能需要自己挑选组合,才能做出一个好看的界面。
希望这些对你有帮助。
在Mac上,开始使用Python的最简单方法有以下几种(没有特定顺序):
- Enthought Python Distribution,这个工具包里包含了大多数你可能需要的科学计算库。对于学术和非商业用途是免费的。
- Macports - 这个工具会保持最新版本,所以你可以用
sudo port install py26-numpy py26-scipy py26-matplotlib py26-ipython
来开始安装。 - Scipy Superpack - 这是一个脚本,可以用来安装所有重要库的最新版本。
我大约两年前就这样做了(把Matlab换成Python),从那以后就再也没有回头。Python中的广播功能、更加直观的内存模型以及Numpy的其他优势,让我在进行数值计算时感到非常愉快。而且通过f2py和cython,把内部循环用其他语言写起来也非常简单。这个链接是一个很好的起点,另外一些很棒的页面可以激励你,比如PerformancePython和ParallelProgramming。一定要理解Python中“变量是对象的引用”这个概念……理解了这一点后,其他的就简单多了。最酷的事情之一是,我可以用两行代码在8个核心上运行:p = Pool(8); res = p.map(analysis_function,list_of_data)
- 而MATLAB的并行工具箱价格非常高,我还没见过哪所大学真的有。