代码之家  ›  专栏  ›  技术社区  ›  Andrea Ambu

MATLAB有什么用?为什么大学如此使用它?什么时候它比Python更好?[闭门]

  •  53
  • Andrea Ambu  · 技术社区  · 18 年前

    我最近被要求为一堂课学习一些MATLAB基础知识。

    是什么让研究人员和在大学工作的人觉得如此酷?

    编写函数或解析文件都很痛苦。我还处于起步阶段,我错过了什么?

    在“真实”的世界里,我该怎么用它呢?什么时候它能比Python做得更好?为了更好,我的意思是:写东西的简单方法。


    更新1: 我最想知道的一件事是“我错过了什么吗?”:d

    更新2: 基本的 为了通过考试,MATLAB:P)对于现实世界中的特定任务,它确实比Python好。

    21 回复  |  直到 16 年前
        1
  •  77
  •   Eric O. Lebigot    14 年前

    亚当只是部分正确。许多数学家(如果不是大多数的话)永远不会碰它。如果有一个计算机工具被使用的话,它将是 Mathematica 或 Maple . 另一方面,工程部门通常依赖于它,对于一些应用数学家来说,肯定有一些有用的东西。它在某些领域的工业中也大量使用。

    Fortran

    然而,如果你把它看作是一个在计算机上进行某些类型研究的环境,它有一些真正的优势。这和做浮点线性代数一样好。该符号简单且功能强大,实现速度快且可信。它非常擅长生成绘图和其他交互任务。有大量的“工具箱”具有用于特定任务的良好代码,而且价格合理。有大量用户共享数字代码(Python)+ NumPy (至少到目前为止,在同一联赛中没有任何对手)

    Python是一种更好的编程语言(和其他许多语言一样)。然而,就工具而言,它落后了十年左右。

    对于通用编程语言来说,这是一个糟糕的选择;它很奇怪,对于许多任务来说速度很慢(你需要将事情矢量化以获得高效的代码),并且不容易与外部世界集成。另一方面,对于它擅长的事情,它非常非常好。很少有东西可以比较。有一家公司有合理的支持,谁知道投入了多少人年。这在工业上可能很重要。

    严格地看一下Python和MATLAB的比较,它们对于不同的工作来说都是不同的工具。在它们确实有一些重叠的区域,很难说什么是更好的路线(很大程度上取决于你正在尝试做什么)。但大多数情况下,Python并不擅长MATLAB的核心优势,反之亦然。

        2
  •  38
  •   Oli    13 年前

    大多数答案都不中肯。

    极快编码

    我是计算机视觉博士生,在使用博士学位之前,我用过4年的MATLAB,包括C++、java、PHP、Python……大多数计算机视觉研究人员只使用matlab。

    Matlab通常是 ,因为我们的代码通常会运行几次以获得要发布的结果,仅此而已。

    让我们看看matlab有什么帮助。

    Matlab有很多我需要的函数,所以我不必一直重复它们:

    ind2sub im2col ; 计算图像的直方图: hist(Im(:)) ; 在列表中查找唯一的元素 unique(list) bsxfun(@plus,M,V) ; n维阵列上的卷积 convn(A) ; 计算代码子部分的计算时间: tic; %%code; toc ; 裁剪图像的图形界面: imcrop(im) ;

    名单可能很长。。。

    最接近这一点的是python…但这只是python中的一个难题,我每次都要去google查找我需要的函数名,然后我需要添加包,包之间不兼容,矩阵的格式改变,当我给它char时,卷积函数只处理double,但不出错,只是给了一个错误的输出。。。不

    3) IDE

    例如:我启动了一个脚本。它由于矩阵而产生错误。 我想象它在做: imagesc(matrix) . 我看到矩阵的最后一行很奇怪。我修复了这个错误。 所有变量仍处于设置状态 调试变得很快 谢谢你。

    包含在IDE中。相比之下,使用KCahcegrind是一件非常痛苦的事情。

    +自动完成,函数参数帮助,。。。

    要规范化矩阵的所有列(我一直都需要),我需要: bsxfun(@times,A,1./sqrt(sum(A.^2)))

    要从矩阵中删除所有小量列,请执行以下操作:

    A(:,sum(A)<e)=[]

    在GPU上进行计算

    gpuX = gpuarray(X); 
    %%% code normally and everything is done on GPU
    

    parfor n=1:100
    %%% code normally and everything is multi-threaded
    

    什么语言能打败它?

    当然,我很少需要做循环,所有的东西都包含在函数中,这使得代码更容易阅读,而且索引也不会让人头疼。所以我可以专注于我想要编程的东西,而不是如何编程。

    5) 绘图工具

    Python的绘图工具的功能要少得多。但有一件事非常烦人。每个脚本只能绘制一次图形???如果有脚本,则无法在每个步骤显示内容--->无用的

    6) 文件

    一切都是非常快速的访问,一切都是水晶般清晰,功能名称是精心挑选的。 有了python,我总是需要用谷歌搜索东西,在论坛或stackoverflow中查找。。。。完全浪费时间。

        3
  •  34
  •   Mr Fooz    18 年前

    在我的研究中,我已经使用matlab很多年了。它非常适合线性代数,并且有大量编写良好的工具箱。最新的版本开始推动它更接近通用语言(更好的优化器、更好的对象模型、更丰富的范围规则等)。

    去年夏天,我有一份工作,我用Python+numpy代替了Matlab。我喜欢节奏的变化。它是一种“真正的”语言(以及它所需要的一切),它具有一些伟大的数字特性,比如广播阵列。我也很喜欢ipython的环境。

    • 一致性: MathWorks花费了大量精力使工具箱看起来和工作起来都很相似。他们还没有完成完美的工作,但这是我所见过的几十年历史的代码库中最好的一个。
    • 文档: 相当地 同样的工作。能够获取源代码是非常宝贵的(公平地说,大多数Matlab工具箱也附带源代码)
    • 对于我所做的,Matlab的语法通常更紧凑(但并非总是如此)
    • 动力: 我现在有太多的Matlab代码要更改

    如果我没有这么大的现有代码库,我会认真考虑切换到Python + NUMPY。

        4
  •  15
  •   dlamblin    14 年前

    当您想在MATLAB中进行运算、绘图或探索时,以及当您想拥有Python提供的所有功能时,您将很快感受到这一点。许多工程师使用Python或Perl进行前后处理。有时甚至只是向MATLAB求教一些困难的地方。

    它们是完全不同的工具,您应该首先了解它们的基本优势,而不必试图用一个替换另一个。为了省钱,我要么使用八度音阶,要么省吃俭用,学会用Perl或Python处理稀疏矩阵。

        5
  •  13
  •   Lance Roberts    17 年前

    如果我能使用大量的数组/矩阵操作,我可能只会在大型程序中使用它。

    您不必像在更正式的软件包中那样担心IDE,因此对于没有太多编程经验的学生来说,学习IDE更容易。

        6
  •  12
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    MATLAB是一种流行且广泛应用的软件 复杂的软件包。思考是错误的 “工具箱”。我最近用过 Matplotlib 绘制一些数据 其他一切决定取决于你需要做什么。

    由于 强大的控制和图像处理工具箱。和大家一样 前面提到了数组运算,它们在每个MATLAB中都使用 需要编写的脚本,使用MATLAB非常简单。

    MATLAB的另一个优点是它非常简单,而且 快速制作原型,并使用构建的 导入图像并计算其直方图或执行一些简单的操作 正在处理它。MATLAB的一个缺点可能是 速度,因为它的解释性质。然而,如果有 真的需要比他能选择的速度来实现 用C/C++等语言测试逻辑。

    为了进一步与Python进行比较,我可以说MATLAB 需要四处寻找外部图书馆和

    关于MATLAB的最后一点,我所看到的在本文中没有提到 这里的答案是,它有一个非常强大的视觉效果 建模/仿真环境称为 Simulink . 它是 使用Simulink更易于设计和模拟大型系统。

    最后,同样,这取决于你需要解决的问题 MATLAB的工具箱,您可以访问MATLAB然后 可以肯定你会有正确的工具来解决它。

        7
  •  10
  •   Community Mohan Dere    9 年前

    正如其他人提到的,MATLAB非常擅长矩阵操作,最初是作为著名的 BLAS 和 LAPACK 用于线性代数的库。它与Java等其他语言具有良好的接口,并且由于其良好的开发和文档库而受到工程和科学公司的青睐。从我对Python和NumPy的了解来看,虽然它们共享MATLAB的许多基本功能,但它们的库没有足够的深度和广度。

    就我个人而言,我使用MATLAB是因为这是我在实习期间学到的,这是我在研究生院使用的,也是我在第一份工作中使用的。我不反对Python(或任何其他语言)。我也习惯了。

    Jim C 来自gnu的电话 Octave

        8
  •  7
  •   dsimcha dsimcha    18 年前

    就我个人而言,我倾向于认为Matlab是一种交互式矩阵计算器和绘图工具,具有一些脚本功能,而不是像Python或C这样一种成熟的编程语言。它成功的原因是矩阵和绘图是开箱即用的,你可以在没有实际编程知识的情况下做一些非常具体的事情。正如您所指出的,该语言在用于更通用的任务(例如,即使是最简单的字符串处理)时也非常令人沮丧。它的语法很奇怪,而且它的创建并没有考虑到超过100行左右的项目所需的抽象。

    我认为人们试图将Matlab作为一种严肃的编程语言的原因是,大多数工程师(也有例外;我的学位是生物医学工程,我喜欢编程)都是可怕的程序员,讨厌编程。他们在大学里学习Matlab主要是为了矩阵数学,他们学习一些基本的编程作为学习Matlab的一部分,并且假设Matlab足够好。我想不出我认识的任何人除了Matlab之外还懂任何语言,但是除了一些纯粹的数字运算应用程序之外,他们仍然使用Matlab。

        9
  •  6
  •   Adam Bellaire    18 年前

    它在大学里被如此广泛使用的最可能的原因是数学系的教师已经习惯了它,理解它,并且知道如何将它融入到他们的课程中。

        10
  •  6
  •   Aaron Maenpaa    18 年前

    之间 matplotlib+pylab NumPy 除了@Adam Bellaire建议的文化惯性之外,我认为Matlab和python之间没有太大的实际区别。

        11
  •  6
  •   Derek Smyth    18 年前

    1. 公司里没有人知道Python,尽管我们很多人都想使用它。
    2. MatLab有一个名字,一个公司,和它背后的任务组来解决任何问题。

    如果它值10000英镑(??),那它一定值!!

    我支持你。Python是MatLab的一个很好的替代品。

    我应该指出,有人告诉我,该公司可能使用5%到10%的MatLabs功能,这是我同意原始海报的基础

        12
  •  6
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    • 工程模拟与仿真
    • 数据的快速可视化

    Octave Python正在迎头赶上。

        13
  •  5
  •   DarenW    18 年前

    似乎是纯粹的惯性。在使用它的地方,每个人都太忙了,无法学习足够详细的IDL或numpy来切换,也不想重写好的工作程序。幸运的是,这并不是严格意义上的正确,但在Matlab将长期存在的足够多的地方,这是正确的。像Fortran(在我工作的地方积极使用!)

        14
  •  4
  •   John Mulder    18 年前

    它在工业上有用的主要原因是构建在核心功能之上的插件。在过去几年中,几乎所有活跃的Matlab开发都集中在这些方面。

    不幸的是,你没有太多机会在学术环境中使用这些。

        15
  •  4
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    我知道这个问题由来已久,因此可能不再存在 我看了,但我觉得有必要发表评论。作为 乔治亚理工学院的航空航天工程师,我可以说,没有 令人不安的是,MATLAB真是太棒了。你可以很快得到它 与Excel电子表格交互以获取有关的数据 火箭飞得有多高,有多快,风是如何影响的 火箭技术,类似的概念在汽车,卡车, 飞机,宇宙飞船,甚至田径。你可以停下来 大量数据,操作所有数据,并确保 你的结果应该是这样的。万一发生了什么事 禁用此选项后,可以在出现错误时添加换行符以进行调试 您的程序无需每次重新编译 运行你的程序。它比其他一些程序慢吗? 嗯,从技术上讲。我确定如果你想打电话 可能会更快,但需要更多的努力

    MATLAB作为一种通用的编程语言,其功能较弱。不是 用于与Python、Java、ActionScript、C/C++或 任何其他通用语言。这是为家庭准备的 这真是不可思议。

        16
  •  4
  •   Peter Mortensen Pieter Jan Bonestroo    16 年前

    数据集,它有许多额外的优化,包括 检查和特殊套管常见问题(减少至 边缘案例。通常,您可以在标准中提交问题 形成一个通用函数,它将决定最佳的 基于数据使用的基础算法。小的 优化算法不是问题。

    这是一个讨厌MATLAB的人写的,他已经试过了 由于集成问题而更换。从你的 问题,您提到了获取Matlab5并将其用于 Octave ,一个具有相同 语法。我猜现在已经达到了MATLAB的5个级别(I 只玩它)。这应该允许你“通过” 要使用的底层算法)。

        17
  •  4
  •   zellus    15 年前

    MATLAB在大学中流行的一个原因与很多东西在大学中流行的原因是一样的:有很多教授熟悉它,而且它相当健壮。

    我已经和很多人谈过了,他们对MATLAB的初生能力特别感兴趣,即利用GPU而不是串行工作。在研究生院使用过Python之后,我有点希望在这种情况下我能使用MATLAB。这肯定会让向量空间计算变得轻而易举。

        18
  •  3
  •   Andrew Edgecombe    18 年前

    所有这些都可以用python手工编码(因为它是一种通用语言),但是如果你所追求的只是结果,那么把钱花在Matlab上也许是更便宜的选择?

    这些功能还针对性能进行了调整。Numpy的文档规定,他们的傅里叶变换针对2点数据集的功率进行了优化。据我所知,Matlab已经编写成使用最有效的傅里叶变换来适应数据集的大小,而不仅仅是2的幂。

    编辑:哦,在Matlab中,你可以产生一些轰动的效果 看

        19
  •  3
  •   Mark Reid    18 年前

    我想你回答了你自己的问题,当你注意到Matlab“很酷地使用矩阵和绘图”。任何需要大量矩阵数学和可视化的应用程序都可能在Matlab中最容易实现。

    如果您的大部分编程都涉及这些类型的操作,例如信号处理和一些统计技术,那么Matlab将是一个更好的选择。

        20
  •  2
  •   Andru Luvisi    18 年前

    First Mover Advantage . Matlab 从20世纪70年代末就开始了。Python是最近才出现的,使其适合于Matlab类型任务的库也是最近才出现的。人们习惯了Matlab,所以他们使用它。

        21
  •  2
  •   Ben Fossen    16 年前