【问题标题】:replacing Matlab with python用python替换Matlab
【发布时间】:2009-11-21 18:24:26
【问题描述】:

我是一名工科学生,我必须做很多数值处理、绘图、模拟等。我目前使用的工具是 Matlab。我在我的大学计算机中使用它来完成我的大部分作业。但是,我想知道有哪些免费选项可用。

我做了一些研究,很多人都说 python 在各种场景中是 matlab 的一个有价值的替代品。我想知道如何用 python 来做这一切。我使用的是 mac,所以我如何安装不同的 python 包。那些包是什么?它真的是一个可行的选择吗?使用这个 python 设置我能做什么和不能做什么?

【问题讨论】:

  • 如果您正在寻找 IDE,spyder 与 matlab 有很多相同的功能:en.wikipedia.org/wiki/Spyder_(software)
  • 我读过的MATLABPython 之间最客观的比较之一,其中提到了许多真正发挥作用的功能是this

标签: python matlab


【解决方案1】:

在 Mac 上,最简单的入门方法是(不分先后):

  • Enthought Python Distribution 其中包括您可能需要的大多数科学软件包。免费用于学术/非商业用途。
  • Macports - 与最新版本保持同步,所以 sudo port install py26-numpy py26-scipy py26-matplotlib py26-ipython 应该可以帮助您入门。
  • Scipy Superpack - 安装所有重要软件包的最新 svn 版本的脚本。

大约 2 年前我已经做到了这一点(用 Python 替换 Matlab)并且没有回头。 Python 中的广播、更直观的内存模型和其他 Numpy 优势使数值工作成为一种完全的乐趣。加上 f2py 和 cython,将内部循环放入另一种语言非常容易。 This 是一个很好的起点 - 其他令人印象深刻的提供动力的页面是 PerformancePythonParallelProgramming。一定要理解 Python 的“变量是对对象的引用”的语义……在调整之后一切都一帆风顺。击败 matlab 的最酷的事情之一是我在 2 行中运行了 8 个内核...p = Pool(8); res = p.map(analysis_function,list_of_data) - MATLAB 并行工具箱非常昂贵,我还没有看到真正拥有它们的大学。

【讨论】:

  • 您可能还想安装开发者工具;各种模块确实需要gcc编译器和make来安装。
  • "MATLAB 并行工具箱非常昂贵,我还没有看到真正拥有它们的大学。"实际上,并行计算工具箱只是一个标准工具箱,我使用过的所有大学站点许可证都包含它。如果您谈论的是分布式计算服务器,那么您是绝对正确的,它很昂贵,但您不需要它在 8 个本地内核上运行。
  • 我的立场是正确的——我认为它更贵。不过在英国还没有看到。为了让您了解我的前 10 名 > 25,000 名学生大学,我们拥有 2 个优化工具箱许可证!我们有一个新的计算机套件,用于大约 10 台计算机的理学硕士课程 - 我研究了获得 DCS,总成本是硬件成本的 3 倍。
  • 哎哟!这很粗糙。 DCS 的成本是我开始为我的一些团队更大的项目学习 Python 的部分原因。顺便说一句,总体上很好的答案。 Enthought 看起来非常方便(可惜 64 位版本不能免费供学术界使用)。
  • 64 位版本的 EPD 对学者免费。您只需向他们提供您的电子邮件地址。
【解决方案2】:

我使用 Matlab 编程大约 15 年,使用 Python 大约 10 年。它通常这样分解:

如果你能满足以下条件: 1.你主要使用矩阵和矩阵运算 2. 你有钱买一个 Matlab 许可证 3. 您在 mathworks 支持的平台上工作

然后,无论如何,使用 Matlab。否则,如果您有矩阵以外的数据结构,想要一个开源选项,让您无需担心许可证即可交付解决方案,并且需要在 mathworks 不支持的平台上构建;然后,使用 Python。

matlab 语言很笨拙,但用户界面很流畅。 Python 语言非常好——具有 matlab 所缺乏的迭代器、生成器和函数式编程工具;但是,如果您不喜欢(或不能使用)SAGE,您将不得不选择组合一个漂亮的光滑界面。

希望对你有帮助。

【讨论】:

  • 同意一切。如果您需要非双稀疏矩阵(matlab 不支持)、内存映射文件、内存的低级控制(复制内容时等),请使用 Python。我认为 Python 的良好接口开始出现,现在科学堆栈开始稳定化 - 参见例如 code.google.com/p/spyderlib - 我希望它们在未来几年内迅速改进。
  • 使用 numpy,在 python 中处理矩阵同样容易。
【解决方案3】:

用Python代替Matlab需要考虑三个方面;核心语言功能、IDE 和价格。

能力比较

本节概述了每个平台的所有功能。简而言之,Matlab 可以做的所有事情,Python 也可以做得更多。然而,像线性代数和快速原型制作 Matlab 之类的东西做得更干净。

Matlab

Matlab 中的所有内容都已捆绑,并且工具箱已无缝集成。它也更加成熟 - 但不是为通用编程而设计的,这意味着任何与线性代数无关的东西实施起来都很痛苦。

  • 工具箱:Matlab 工具箱非常好,python 实现常常难以与它们竞争(即使是优化算法等不那么专业的东西)。
  • 线性代数: Matlab 具有简洁的线性代数功能,更易于阅读和解释。
  • 可视化功能:具有非常出色且范围广泛的可视化功能。

Python

Python 需要一些额外的模块才能成为一个好的 Matlabreplacement。

  • 通用编程:Python 是一种合适的编程语言,它比 Matlab 提供了更多的灵活性。
  • Numpy: 提供数组和线性代数例程,但语法比 Matlab 更笨拙。我已经爱上了broadcasting 功能,但不再是repmat 垃圾。
  • SciPy:统计、优化和其他有用的数学知识。
  • MatPlotLib: 在我看来,提供比 Matlab 更高质量的绘图。此外,它的设计在语法上与 Matlab 相似,因此应该很容易上手。
  • SymPy:很好的符号编程包。

IDE 比较

这是我认为 python 缺乏的地方。我只是发现在 Matlab IDE 中进行算法开发(尤其是涉及大量线性代数)不那么痛苦。

Matlab

以下是一些关键的 Matlab 功能,如果没有工科学生,这些功能将难以生存。请注意,Python IDE 也确实具有其中的一些功能,但实施得比较草率。

  • 强大的调试功能:可以以非常不受限制的方式轻松探索功能。 Python 也允许调试,但在 IDE 中的实现通常不那么干净。
  • 变量浏览器: MATLAB 有一个很好的变量浏览器,它总是适合查看许多支持的数据类型。一些 python IDE 难以显示 numpy 数组,这可能很烦人。
  • 变量生存:如果代码在运行时中断,变量仍然存在,这有助于调试。此外,假设持久变量更容易连续运行不同的脚本。在 Python 中,您必须手动将变量保存在脚本中,以使它们可用于其他脚本。
  • Profiler:非常适合细分算法的瓶颈。
  • 命令行 单行指令可以在命令行上执行。 Python 在所有优秀的 IDE 中也完全支持这一点。
  • GUI 绘图工具:可以从用户界面快速轻松地绘制结果和变量。大多数 Python IDE 都面向软件开发,因此不支持此功能(尽管 sypder 通过 matplotlib 提供的支持有限)。
  • 文档:所有函数在 IDE 中都有本机文档。

Python

有一些新的 python IDE 开始与 MATLAB 的一些关键优势竞争。我个人喜欢最近作为免费社区版本发布的PyCharm。它具有以下功能,并且从 UI 角度来看设计得非常好。

  • 正在调试
  • 变量浏览器
  • 命令行
  • 文档

价格比较

Python 是免费的,并且有一个活跃的支持社区。 Matlab 也有一个很好的支持社区,但不是免费的。

【讨论】:

  • 我发现 matlab 中的 IDE 与您所说的完全相反,可能是因为这是从 2013 年开始的,但是天哪,即使与最基本的 Python IDE 相比,matlab 的 IDE 也绝对可怕,像蜘蛛一样。实际上,在 matlab IDE 中编程比使用带有 matlab 插件的 Visual Studio Code 需要更长的时间,因为它有多糟糕。可耻的是,mathworks 仍在以与它一样多的价格销售该产品,但甚至没有在自己的 IDE 中投入精力,即使是最基本的功能。
【解决方案4】:

也许您喜欢sagemath,它“将许多现有开源包的强大功能结合到一个通用的基于 Python 的界面中”。这是feature tour

【讨论】:

    【解决方案5】:

    试试Sage - 它被设计为 Matlab、Mathematica 等的开源替代品。它是用 Python 实现的,可以用 Python 编写脚本,但它也添加了许多数学特定的功能。有一个installer for the Mac,所以你不需要下载很多单独的包。

    还有GNU Octave - Mathematica/Matab 的另一种开源替代品,它有自己的编程语言。但是我没有找到任何关于 Mac 版本的信息(虽然我没有仔细看)。

    【讨论】:

      【解决方案6】:

      python(x,y) 非常强大,但仅适用于 Windows 或 Linux,因此您必须使用 bootcamp 或 Linux。一个更轻量级的数学包是Matplotlib,它基本上为Python语言增加了绘图能力(与IPython一起使用更好)。

      【讨论】:

        【解决方案7】:

        this 的重复。

        我的感觉是,对于纯数值/线性代数计算和可视化,Matlab 是一个稍微更一致的开发环境。 Numpy/Scipy/Matplotlib 对我来说感觉有点随意。如果您正在构建一个完整的程序——以自动化系统或在网页上显示结果——Python 首先是作为一种真正的编程语言的优势。但对于交互式数值处理,我认为 Matlab 仍然胜出。 Python 中缺少元素明智的中缀运算符就是一个小例子 (PEP 225)。在统计计算、数据探索和可视化方面,R 无可匹敌。

        【讨论】:

        • Numpy 中数组运算的默认值是元素...如果您有很多线性代数(对于矩阵类正常 *运算符是矩阵乘法)
        • 我同意你可以解决这个问题,但是对于整天处理矩阵的人来说,这些解决方法不如 matlab 风格的语言提供的好。特别是在动态类型语言中,我不知道对象是数组还是矩阵,因此不知道 * 的含义。除了矩阵乘法之外,元素和对象明智的运算符也很有用。例如,元素和对象明智的逻辑运算符服务于不同的目的,强加列一致性的加法运算符(如在 Stata 的 mata 语言中)也很有帮助。
        【解决方案8】:

        如果 sourcefourge 的 matlab 到 python 转换 mat2py 项目能够起飞,那就太好了..

        【讨论】:

          猜你喜欢
          • 2014-04-07
          • 1970-01-01
          • 2014-09-15
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 2018-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多