我是matlab的死忠用户,主要是因为这是我首先学到的,而且我还没有遇到过足够大的差异来切换的问题。我来自数值优化/线性代数,在那里我在数百万个自由度中进行了优化和特征值计算。最近,我进入了随机的领域,我原本的印象是我会被迫改变。但是,在优化代码并仔细初始化随机数生成器的种子之后,我能够在大致相同的时间内完成与我同时代人相同的蒙特卡洛任务。我的理解是,基本级别的“if”语句等在 matlab 中要慢得多。但是,如果每个循环中有大量可以矢量化的计算,我' m 不相信 C 会更好。而且,无论如何,matlab 似乎做得很好,从某种意义上说,我的上限不亚于任何其他专业人士(而且在许多情况下,似乎更多)。我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯 我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯 我有一种感觉,我会从这里的亲 C 人那里得到很多回应,他们很久以前就将 matlab 视为一些琐碎的玩具语言。我是一名专业研究人员,我认为 matlab 在最高水平的计算密集型数学规划方面具有竞争力。我错了吗 ?我是否需要考虑更改为较低级别的语言,例如 C/FORTRAN ?为什么或者为什么不 ?还有像我这样的人吗?非常感谢!干杯
8 回答
我与一个专业研究地球物理学家团队合作,尽管我自己更像是一名数值软件工程师。我认为,如果您的工作是数值数学,那么 Matlab 非常适合,尤其是因为您已经熟练使用它。
如果您选择 C 或 Fortran,您可能会编写更快的程序,尽管可能不会像您希望的那样快,因为 Matlab 对于它的许多数值例程使用与您编写时相同的 BLAS(等)库C 或 Fortran。但从我的工作经验来看,我的同事发现能够更快地编写程序比编写更快的程序更重要。他们产生了很多想法,经过反思,他们后来拒绝了。Matlab 在 C 和 Fortran 之上提供的额外开发速度意味着它们更快地完成整个周期(通常包括结果的可视化)并且更频繁地进行,因此通过一些粗略的措施来做更多的科学。
(顺便说一句:我得到的工作之一是将一些未被拒绝的 Matlab 代码转换为 Fortran 程序,以便在公司的大型集群上执行。但这就是我们的一些代码在初步研究完成后会发生的情况,并且我们想将它们部署到生产环境中。)
我还要指出,Matlab 通过其 Parallel Compute Toolbox 具有良好的并行计算能力(如果你能负担得起的话),随着你的问题变得更大并且你意识到你没有充分利用你的一些内核,这可能会很有趣,天哪它甚至在最新版本中集成了 GPU 计算。
简而言之,我建议留在 Matlab 可以让您专注于数学研究,而不是将注意力转移到与新工具集搏斗上。尤其如此,因为您并不认为 Matlab 不足以满足您的预期需求。
如果您主要从事涉及简单数据结构的原型设计算法,matlab 是一个不错的选择。许多在计算领域工作的学者的工作流程是:开发一种新算法,检查它在 matlab 中是否有效,然后写论文,就完成了。如果这就是您想做的全部,请坚持您所知道的(matlab)。
如果您想做的还不止这些…… 那么 Fortran 和 C/C++ 不能与 Matlab 直接比较,因为除非性能至关重要,否则没有理由使用编译语言。另一方面,Python 具有与 matlab 类似的功能集,此外它还是一种免费的完整编程语言,拥有活跃的在线社区。切换到 python 的不利因素令人惊讶地可以忽略不计,而好处却是巨大的。我想念一些 Matlab 的数组处理语法,因为 Numpy(python 的数组操作模块)有一些怪癖,但仅此而已。我最近从 matlab 切换到 Python,我不打算回去。Matlab 似乎让我以最糟糕的方式编写代码。我的 Python 代码更简洁、更模块化且更易于阅读。此外,Sphinx 文档系统也很棒。
简而言之,如果出现以下情况,请考虑使用 python:
- 您将需要维护一个大型代码库
- 你想让你的项目开源并让其他人贡献
- 您想让没有 matlab 许可证的人可以使用您的代码
- 您想编写自己的自定义数据结构而不是数组(树、图、...)
- 您需要实现非数字代码(搜索本地目录、从 url 下载、使用正则表达式查找本地文件、文本处理)
- 您想轻松有效地生成出色的文档
- 您不想在 matlab 许可证上花费现金
这里有一个链接为 python 在 matlab 上的科学研究争论:http: //www.stat.washington.edu/~hoytak/blog/whypython.html
这是一个自我放纵的链接,展示了 python Sphinx 的惊人潜力,可以自动生成漂亮的在线文档,无缝集成数学推导和实际源代码: http: //pythonhosted.org/fit_neuron/overview.html
Python 似乎有望成为科学计算的标准,因此绝对值得学习。
作为一个在工程领域的学术界和工业界之间移动的人,我不更多使用 Matlab 的唯一原因是成本。如果你和所有你想给代码的人都拥有 Matlab 许可证,那么没有理由切换。
如果您发现代码的某些部分需要优化,您可以只用低级语言重写这些位,然后从您的 Matlab 程序中调用它们。在我看来,出于性能原因切换语言是一种过早优化的情况。我在迭代过程中解决计算密集型问题:
- 首先以最快和最直接的方式组合解决方案,这在您的情况下意味着使用您最了解的语言。
- 使用探查器使用有限的数据集运行它,并找出瓶颈在哪里。
- 使用以下任何一种方法修复最严重的瓶颈:a) 更改算法,b) 使用当前开发环境的特性进行优化,c) 将那段代码重写为针对特定问题执行得更快的代码。
- 回到 2。直到你的运行时间/开发时间方程达到任何你觉得舒服的阈值(或者,如果你是一名研究生,直到你的主管对你大喊停止摆弄那些该死的东西,并且已经运行它)。
换句话说,在性能出现问题之前不要强调性能,尤其是在编写供自己使用的代码时。
好吧,我更像是一个 C++/Java 程序员而不是一个 Matlab,虽然我使用过 Matlab,但我认为对于数学研究,Matlab 非常适合。研究是涉及大量实验的东西,而 C++ 是一种用于进行实验的可怕语言。Matlab 使快速测试事物变得非常容易,找出哪些有效,哪些无效,然后继续前进。一旦你知道你想做什么,你总是可以用另一种语言编写你的解决方案,假设 Matlab 版本太慢(从我所见的有限数量来看,有时是,有时不是)。
底线:您可能不想对所有事情都使用 Matlab(“如果你只有一把锤子,一切看起来都像钉子”这句话会浮现在脑海中),但它对于数学研究的特定任务来说无疑是一种很好的语言。
我还会考虑 Mathematica 软件,它非常适合数学家的一些需求
您肯定会看到 Matlab 在某些方面速度很快,但是当您需要手动内存管理等专门的东西来处理超出 Matlab 想要给您的向量时,您需要跳过一些障碍。
我相信您可以在 Matlab 中快速轻松地完成所有操作,但我认为它在优雅和优化后的可读性方面非常麻烦。矢量数学当然既有趣又快速,但我发现有时很难发现尺寸。
我会说坚持你所知道的,当你确信 Matlab不能做到时切换。学习另一种语言很难,尤其是当您想要快速编码和数值计算时。
在旁注中,我更喜欢 C++,以及一些很棒的库(GSL、Eigen 等)。有趣的是,我仍然在 Matlab 中制作绘图,因为我非常了解 Matlab 的那部分 :)
我认为 matlab 适合你,因为 c 是一种通用语言,而 matlab 是为数学设计的。
Matlab 擅长:
- 高级矩阵数学(只需计算 A*B,您不必调用 A.multiply(B) 或某些 C++/Java 类型语法)
- 数据分析
- 数据可视化
- 与 Java 接口
并且有足够的库/工具以一种简单(但不一定优化)的方式完成几乎所有其他工作,一旦开始,您就可以继续在 MATLAB 中工作。
我讨厌使用一些非常适合矩阵数学的软件包,但是当我去做其他事情时,它很糟糕,我面临要么接受这种糟糕的选择,要么放弃我的工作并使用不同的软件。