MATLAB在逐渐被Python淘汰吗?

导语:最近在知乎上看到这样一个问题大家讨论的非常火热特将挑选了有代表性的观点供大家讨论

最近在知乎上看到这样一个问题,大家讨论的非常火热,特将挑选了有代表性的观点供大家讨论。


提问:目前在自学matlab,但看到铺天盖地劝退matlab建议转Python,吐槽matlab各种不如Python,但是我们老师都是向学生推荐matlab,请问matlab现在逐渐被Python淘汰吗?


ID 陈伟杰:


不会被淘汰,但MATLAB市场会被挤压得很惨。如果不是因为很多新入行的年轻人都在用Python,为了交流学习,我都不太想用Python。我至今都觉得SciPy体系只是个“乞丐版“的MATLAB。


Python和他的伙伴们(SciPy,NumPy,SymPy,Matplotlib这些)能战胜MATLAB全靠开源免费吸引战略人才加入。就一般使用者来说,Python比MATLAB没啥显著优势,反倒是很高的学习成本,手上要解决的问题先得放下几个月,得先学Python和各个library。


SciPy,NumPy,SymPy这些library,用过的同学都知道,那个documentation的水平差MATLAB太远了,MATLAB的documentation不但是MATLAB的教材,还可以当很多科学学课的教材用。


你们可以去翻下Scipy和NumPy的documentation,简直是云里雾里,经常都是说到一半就没了,你还期望看个例子,也没有,不停要在google上搜。搜着搜着,我有时候就忘了手里要解决什么问题了。


SymPy是个超级强大的library,大家都低估它了,以为它只会搞搞符号运算,推个公式这些。我不知道是我水平不行还是,那个domentation里找啥没啥,我经常找不到需要的method或者function,只能翻开源码里面的docstring来找答案。


而且几个library里经常有些重叠的内容,连方程名字都一样(这就是用python必须要防止name contamination的原因),比如你要算一个矩阵的特征值/向量,SciPy,NumPy,SymPy都能做,但是你需要什么样子的结果?需要复数吗?需要normalized的特征向量吗?需要用什么算法?你要分别翻开三个包网站分别去查,而且还经常查不到,还是只能去翻源码。


MATLAB就是一站式解决,不同toolbox的documentation相互有参考链接。


即便是这样,在目前来看,我用Python的时间已经超过MATLAB了。因为时代在变,MATLAB的黄金年代已经过了,大家都要进步。


ID 徐方鑫:


不太会,当下Matlab最优势的应该是各个专业工具箱了,其实Matlab已经在转型了,基本的功能变得比较弱化,但是一个个工具箱开始被强化到无可替代。早前我们学习的时候,Matlab实际上是作为一个矩阵计算软件,从仅仅是计算软件而言,这点确实可以被Python替代了,Python免费而且体积小,而Matlab收费且越来越大。所以如果题目说”Matlab在大学的基础课程教育中,会不会被Python淘汰?“,这个倒感觉有这个趋势。


不过在专业性越高的需求,Matlab的功能也就越强,而且比原来的matlab要强很多。感觉一开始学习matlab的时候,很多代码实际上都是大家自己做的开源的,所以很多地方也有不严谨的地方,但是后来matlab就是官方加持了,示例代码的质量和工具箱的质量都提升了好多。


ID 星空:


我计算机系的,我们学校数学实验要用matlab。。。我就贼烦,为啥不用Python啊?Python作为一个解释型语言又简单而且第三方库又多,matlab有啥功能第三方库拉一个不就可以了吗?反正Python第三方库开发者那么多。


后来写第一次作业。。。好香!对于计算机系同学而言,matlab上手难度几乎没有。对于没有编程经验的其他系同学,matlab也比Python上手友好很多(下载一个软件全搞定,不用很麻烦地配置环境);而且matlab在数学这一块处理真的是专业!数据类型优化到感觉不到,也是解释型语言,函数支持丰富,支持先定义结构。


可能matlab最大的问题就是不开源,单买对于我们的消费习惯来说有些小贵。


ID 哦啦啦啦啦啦:


观点是技多不压身,你有空纠结,两个都可以学掉了。matlab以它独特的对于python显著优势,不会被淘汰。两者都有极其对付的受众,有庞大的用户群体。


本人非CS系,不需要把代码当学问,只把各类编程语言当工具,最重要的是效率和效果。而不同语言都有各自的价值。类似西厨的价值观,对我来说学一门语言就像入手一把新的菜刀,我做不同菜用不同刀就好了。做实验数据拟合,物理原理模拟等科学运算(个人部署)我首选Matlab.


优点:Matlab上手很快,灵魂是对矩阵处理运算很舒服,相比python拿来做科学运算就不用import numpy as np, 然后各种np.(其实np语法和matlab和octave很多很像,所以迁移起来不难,主要要熟练一下两个语言中括号的不同boardcasting) 。matlab更简洁,更舒服,各种工具包也很强大,文件数据读写等都有现成函数,很多数值方法求解的内置函数,用来解微分方程组等再舒服不过了。matlab还出了app可以随时随地编程,直接连上仪器就可以获取数据,并且手机自己也可以当sensor,这个真的很有意思。


缺点:可读性稍微差点(只是说稍微),几个人肝的大项目写法不同,读起来相比python累一点。容易找不到错误,而有时候就是.*和*错了,python的话用np.multiply和np.dot就比较容易发现。需要爬数据,数据可视化,深度学习或者需要对接数据库API,大的连续项目一般我选择用python,底层运算用c/c++


优点:整体化,各类大神把其他语言能做的都做了相同的包到python上,你就可以像搭积木一样进行编程,就像一个收纳盒子,集百家之长。再加上不要乱写的话可读性非常高,个人体会来看这两方面大大缩短开发周期;好维护;面向对象的编程语言;深度学习的开发(pytorch,tensorflow:虽然tf对于我像神经分裂一样难用,静态图到keras过度真的整麻了),两个包是此领域的大杀器,GPU部署友好,直接用就行,拥有他们你的思路可以改得快,丝毫不虚中途改组网络而去纠结backprop修改和每一步张量大小是否正确;jupyter notebook,这玩意儿真的太爽了,无论是去搞懂别人代码思路,还是de自己的bug,或者做笔记一绝,在数据科学领域也是一绝;跨平台部署方便。


所以不必纠结,都试试,处理问题时哪把刀最顺手就用哪把,干净利落,不必硬要一把刀走遍天,问题能够顺利解决才是最好的,选择最快最舒服的路。


ID 西蒙宫:


Python的优势



● Python相对于Matlab最大的优势∶免费。

● Python次大的优势∶开源。你可以大量更改科学计算的算法细节。

● 可移植性,Matlab必然不如Python。但你主要做工程,这方面需求应当不高。

● 第三方生态,Matlab不如Python。比如3D的绘图工具包,比如GUI,比如更方便的并行,使用 GPU,Functional等等。长期来看,Python的科学计算生态会比Matlab好。

● 语言更加优美。另外如果有一定的OOP需求,构建较大一点的科学计算系统,直接用Python比用Matlab混合的方案肯定要简洁不少。

● Python是通用的编程语言,做做Web,搞个爬虫,编个脚本,写个小工具啥的用处广。要说非得用Matlab干么也成,只是……



Matlab的优势


● Community. 某些领域就是用matlab方便,大家的论文都用matlab,那你—个人用python肯定不行,反之亦然。

● Simulink,是垄断的,目前没有替代品。

● Matlab本来号称更快,但实际上由于Python越来越完善的生态,这个优势已经逐渐丧失了。


总结


既然老师都推荐用matlab,肯定在你的领域是matlab用的多,那都没什么可犹豫的,直接上 matlab先学懂,即使后期需要python,接着学就好了,两门语言语法层面没什么难点。在科学计算领域,懂基本语法已经足够了,设计模式、算法、数据机构那不是你需要关心的东西。做工程就是遇到什么问题解决什么问题。


ID pb博:


曾几何时,为了拥抱python,我也将自己日常科研中提出的算法都拿numpy,scipy以及其他第三方packages来仿真和验证。然而最近有两次,我的两个算法原型在python里验证怎么都得不到和理论上完全一致的结果。第一个根本没法得到reasonable的结果,第二个可以得到部分一致的结果,但是python求解用到的时间特别长。检查了N遍代码以及我的方法,都无法做到consistent,百思不得其姐到怀疑人生。最后抱着试试看的想法,把python代码对照着在matlab里逐句转换了—遍。神奇的事情发生了,第一个实验matlab里当场给出和理论上consistent的结果,第二个实验不仅得到consistent的结果,而且速度提高了N倍。


代码一样,但结果却是天差地别。究其原因我认为可能是正如 @清雨影 大佬所说,matlab在求逆、产生随机数、矩阵分解等函数上进行了比numpy、scipy相对应的函数,要多得多和细致得多的优化。因为这些函数对用户来说都是黑盒,所以要人工检差是否是这些黑盒引起的偏差实在是太麻烦了。所以如果想要快速、省心的初步验证一些自己的想法是否work,强烈推荐直接上 MATLAB。


当然上面说的仅限于科学计算相关。总结起来,大概是尽管matlab在"人无我有"方面正在走下坡路、但是在"人有我好"方面目前还有很大优势。


ID 卿颜:


Python和MATLAB,谁也淘汰不了谁。工业界,Python的生态链相比MATLAB的生态链,简直是 too young,too simple!认为MATLAB会被Python淘汰的观点,简直是naive!(因为题主提到毕业后是进入工业界,所以咱们主要谈谈MATLAB和Python在工业界的应用)。


让我们来简单罗列Python主要应用的领域∶数据分析、数据可视化、量化交易、爬虫、web开发等等。有没有发现一个规律∶


Python使用的场景,往往是不需要结合硬件、往往是单兵作战而较少与其他软件联合工作。


工业界应用有这么些特点∶


● 需要稳定可靠(如果爬虫爬到一半挂掉了,顶多就是重新运行程序;而如果飞机的控制算法挂了,有可能是要出人命的)

● 需要高效的工作效率(工作越高效,产品上市时间越早,越有可能占领市场)

● 需要结合工业硬件(比如,控制代码是运行在单片机之类的工业硬件中的,而非个人电脑)·需要联合多个软件一起工作(工业应用可能涉及多学科,需要不同的软件来专业地负责不同部分的工作)。


针对这几点,我们来逐一分析MATLAB相比Python的优势。


1、稳定可靠


假设一个场景,你是一个汽车自动驾驶开发工程师,你需要将先进、智能的控制算法引入到汽车控制器中,比如模型预测控制(MPC)。


你可能有三个选择①找一个开源的Python的MPC算法;②自己用Python写MPC算法;③直接用MATLAB的MPC工具箱中的MPC模块。


第一个方法,采用开源的Python的MPC算法,谁来保证算法的可靠性? 也许这段开源算法没怎么经过实践的考验,算法贡献者可能更多地是提供一个参考,而不能保证算法的可靠性。


第二个方法,你是一个勤劳、聪明的员工,哼次哼次花了很大力气编写出了MPC算法,同时你花了不少时间来测试这套算法的可靠性。你的领导很欣赏你的能力和努力,可心里还是有点不放心,毕竟这是关乎人命的算法。


第三个方法,MATLAB是一个商业软件,即便它不能完全保证它提供的MPC算法的可靠性,但这个算法在发布之前已经是经过了详细的测试和验证,具有较高的可靠性。鉴于MATLAB—直以来的可靠性以及在工业界的广泛使用和良好口碑,你和领导都倾向于觉得它的现成算法更可靠、更值得信任。


Python和MATLAB的可靠性差别,可能就是个人背书和商业企业背书的差别。毕意Python不会为你的算法错误负责,而MATLAB会为它提供的算法负一定的责任。


2、高效


其实在上面的例子中,已经明显体现了用MATLAB开发算法的高效性。MATLAB提供了很多现成的、经过工业界实践的算法,省去了你很多基础工作,不需要重复造轮子。


但是,MATLAB提供的现成算法肯定是有限的,必然有大量的算法是需要你自己从零构建的,这时候MATLAB还会比Python高效吗?


——MATLAB当然不可能在所有应用中都比Python高效! 但是在工业界的很多应用中,MATLAB都还是比Python高效,因为MATLAB有一个工具叫Simulink,配合Simulink还有各种代码生成神器。


工业界一个非常重要而目广泛存在的工作就是开发各种控制器(汽车控制器、飞机控制器、卫星控制器、电机控制器等等),我们以控制器开发和测试为例。针对控制器的开发和测试,汽车领域已经在广泛使用基于模型的开发方式(Model Based Development,简称MBD)。题主可能前往的航空航天领域也在逐步推广这种开发方式。汽车控制系统和航空航天控制系统的基于模型设计白皮书,请见以下链接。


基于模型设计,其核心的过程就是用Simulink搭建控制算法模型,然后使用MATLAB的Embeded Coder将模型转化成产品级代码,该代码可烧写到控制器硬件中,形成完整的控制器。


Python写算法,是撸代码的形式; Simulink建模型,是拖拽搭积木的形式。往往Simulink一个模块能顶上Python几行代码甚至几十、上百行。哪种方式效率高,一目了然。


而且很重要的,Simulink的入门难度比Python简单,Simulink模型的可读性比Python代码好, Simulink模型在后期的维护、升级、更新比Python代码方便。

一个简单的栗子。万行以上的Python代码,一旦开发者离职,后继者需要花很多精力去弄懂这些代码。对应级别的Simulink模型,开发者离职后,继承这个模型对后继者来说不是什么难事。


3、对其他软件的兼容


汽车、航空航天等领域的应用,涉及多个学科,往往需要多个软件联合使用,每个软件各尽所能∶MATLAB、AMESim、ADAMS、ANSYS、GT-SUIT等等。与控制、运动学、动力学等相关的软件,几乎所有软件都提供了MATLAB/Simulink的接口,可以与MATLAB/Simulink联合仿真或者互相传输数据。也有不少软件提供了Python的接口,但相比MATLAB/Simulink还是会少一些。


举个栗子。


控制算法开发过程中,有一个很重要的环节——离线仿真。就是将控制算法和被控对象模型都跑在电脑中,进行闭环仿真,测试控制算法的功能逻辑。控制算法,你可以用Simulink来搭建,也可以用Python编写。


被控对象模型,比如车辆模型或者飞机模型,往往是用MATLAB/Simulink或其他专业软件搭建,或者由C++代码编写,几乎没见过用Python编写的。如果你搭建被控对象模型的软件没提供Python接口,那Python编写的控制算法怎么与被控对象模型进行联合仿真呢?


4、对硬件的支持


MATLAB对各种硬件做了广泛的支持,这些硬件包括各种传感器(摄像头、激光雷达等)、各种工业控制器等等,点击以下链接查看具体情况。


对于传感器和工业控制器的支持,Python相比MATLAB是差了一截。


另外,有两个应用中,MATLAB是绝对王者。这两个应用便是控制器开发过程中广泛存在的两个环节——快速控制原型和硬件在环仿真。


对于控制器的开发,汽车领域普遍采用了V型开发流程。快速控制原型(RCP)和硬件在环仿真(HIL)是V型开发流程的两个关键环节。关于V型开发流程,可以查看 @迈特兰博 兄的文章,解释得非常清楚。


● 快速控制原型(RCP)


快速控制原型(Rapid Control Prototype,简称RCP)。实时硬件运行Simulink控制算法模型(模拟控制器),控制真实被控对象(如开关、电磁阀、电机、发动机等),快速验证该 Simulink算法。此时实时硬件可以看作是原型的控制器,通过这种方式我们快速地得到了一个原型控制器,对原型的控制算法进行测试,故称之为快速控制原型。此时,被控对象是真的,控制器是假的(所谓控制器是假的,并不是说控制器是虚拟的,而是控制器不是客户的最终控制器)。


快速控制原型中,控制算法—定是Simulink模型,而不是Python、C++之类的代码写成(纯代码没法直接编译下载到快速控制原型设备中)。这种开发方式,在包括汽车、航空航天、电力电子、机器人等领域得到广泛使用。


●  硬件在环仿真(HIL)


硬件在环仿真(Hardware-in-loop,简称HIL),是一个与快速控制原型RCP反过来的过程。实时硬件运行Simulink被控对象模型(模拟被控对象),受真实控制器的控制,以此对控制器进行测试。此时,控制器是真的,被控对象是假的。在全实物测试之前,先对控制器做一个全面的功能测试。因为该被控对象是假的,所以HIL比全实物测试安全高效,而且可以测试一些全实物测试中不容易实现的极端case。


硬件在环仿真中,被控对象的模型往往是Simulink搭建的或者Simulink与其他软件联合搭建的,而不是纯代码编写(纯代码没法直接编译下载到硬件在环仿真设备中)。这种测试方式,在包括汽车、航空航天、电力电子、机器人等领域得到广泛使用。


综上所述,在工业界,Python是无法淘汰MATLAB的。当然在很多其他应用中, Python也确实比MATLAB更受欢迎。

本文来源于网络,本着学习交流的目的进行转载,已标注原始作者和出处,如存在异议,请联系editor@xingongye.cn。如您对内容有疑问,请告之,以便我们及时处理。

暂无评论,等你抢沙发

  • 短信登录
  • 密码登录
还没有账号,
登录即代表您同意本网站的 《用户注册协议》
还没有账号,
登录即代表您同意本网站的 《用户注册协议》
注册
已有账号, 立即登录
登录即代表您同意本网站的 《用户注册协议》
找回密码