爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23388|回复: 34

[参考资料] Python 会不会替代 MATLAB?(摘自知乎)

[复制链接]

新浪微博达人勋

 成长值: 32430
发表于 2015-2-17 08:09:41 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
最近病倒卧床,好几天没怎么看电脑。一直在用手机和外界保持联系,有什么来不及处理的。大家还请见谅。去医院之前发个帖子,前两天在知乎看到的,感觉挺不错的,和大家一起分享一下。


-------------------------------------------------------

1.匿名用户(1072赞)

就我在工程领域内的见闻,随便说几句

1.
Matla的最直接优点在于,matlab代码不需要编译,省下你无数debug的时间。只要你果真写过“hello world”以外的代码,自然明白这句话的含义


2.
为什么我要强调工程领域,因为matlab这玩意儿就是为工程师设计的,不是为程序员设计的。工程师对编程的需求,和程序员对编程的需求,其实是不一样的。
对程序员来说,代码不仅是工具,更是产品,所以喜欢关注代码本身。
但对工程师来说,工具就真心只能是工具,用起来方便才是王道,至于他的工作原理是不是优雅,对不起我不关心啊。

比如变量不需要声明,不需要检测类型。计算机科班出身的人会和你说这是多么多么的大忌,但实际使用中便利是很多的,谁用谁知道。

做个直观的比较,两种语言:一种10小时编写,1小时运行;另一种1小时编写,10小时运行。
程序员倾向第一种,无可厚非,因为代码的重复使用率极高,先劳而后逸是常态。比如网站,代码写完了挑战才刚刚开始。
但工程师不是,我建一个模型,重要的是设计过程,重要的是这个模型的物理意义。设计完了,一个模型跑几天几夜根本不是事儿,我回家睡觉就是了。等到结果出来,以后这个模型再也不碰了也无所谓。所以我在乎的是设计过程,人力成本比cpu运行成本高太多。

正如楼下的 @张抗抗 朋友所说:
Matlab追求的是解决问题本身的简洁
当你还在关注“术”或“形”上的东西的时候,说明你还没打算解决什么基本问题


3.
为什么matlab在工程行业内受欢迎,因为其既是科学计算,又是程序语言,还是图形设计软件。。。互相之间还无缝兼容,所以才强大。核心功能上确实有一些强力的竞争对手,但如果分散到各个专业领域,尤其是那些分开来卖的toolbox,就未必能找到合格的替代品了。
不喜欢Matlab的人,认为某某工具比Matlab好的人,因为你们只需要使用那一种工具。所以尽管挑那一个用就是了呗。

matlab还有许多为了大型建模及实体模型而服务的功能,比如Code Generation, Simulink Target, Real Time Workshop等等,恐怕是学生党未必会接触到的东西。所以学生党依据日常做作业的经验而给出的评价,我认为不全面。再说了,高校购买的student version本就不是全套功能。。。

我换个说法好了:如果对你来说matlab只是一种程序语言的话,那对不起,这东西确实不适合你用。
换个更简单的说法:如果你用matlab而从未点开过simulink的话,那你也不用和我争了,我懒得和你争。

如果有人说:我觉得自行车比坦克车好用,因为轻便、节能、环保。
请问我该如何回答他呢?


4.
再说个中国用户普遍体会不到的优点:售后服务。
正版matlab包含tech support,24小时电话伺候,无论是有bug还是自己不会用,神马问题都可以问。个人用户不觉得什么,对企业用户来说有售后没售后是完全不同的概念。

举一个实际工作中遇到的例子:
你觉得python免费好用,各种开源的library也应有尽有,你觉得碉堡了,花钱的matlab简直就是垃圾。
然后你写了个程序,但是结果就是算不对。这就屌了,你不得不花好几天的时间去debug。最痛苦的不是bug,而是你始终怀疑这个bug不是你自己的,是免费开源代码自身的漏洞——我这里指的不是python的漏洞,而是第三方工具包的作者可能自己犯错了
经过了一个星期的努力,挣扎吧,在血和暗的深渊里,你终于确定了是代码自身的问题。
这时候就更屌了,人家是免费软件啊,是开源软件啊,谁有空来给你负责啊?你又不会自己重写library,只好到各种技术论坛上去求助。先不说别人未必愿意搭理你,就算愿意,可是你才是专家啊,你干的活别人不懂啊,所以人家也没办法帮你啊。就这样又过了一个星期。
然后你的工作这样一卡就卡了两个星期,也不知道什么时候能够解决。python是免费的是吗?可是美国码农时薪40刀/时,两个星期的人力成本就足够你买matlab了,还有找零

5.
程序员逼格太高,跟你谈算法谈架构,但是对不起啊,我们的侧重点不一样啊。
好比一个医生说青龙偃月刀不适合做手术,所以这玩意儿弱爆了。那没办法,什么事都是你说了算,你赢了行吗?
过去有人提醒我不要在知乎上和程序员对喷,如今我是服了。世界上不是只有程序员一种工作,请你睁开眼睛看看别人的世界

再逐条说几个细节:

矩阵表达,据我所知这是matlab的强项,也是创业初期matlab能够在一堆科学计算中脱颖而出的关键。所以这一条我实在不知道你的喷点在哪里,请阐明细节

说matlab的代码“丑陋”,“不优雅”。这就真没法说了,请先定义优雅。另外你觉得C比java好看吗?法语比日语优雅吗?还是那句话,光说这些主观感觉的我实在无法回答

——————————————————————————
我真是服了一些喷子了
我这帖一没强买强卖,二没贬低别家,我连横向比较都尽量减少了,单纯分享一下自己的使用体验而已。就这样还能有人喷?还让不让人说话了?知乎是你家开的?
工具就是工具,通过贬低别人的工具来彰显自己水平的人,我真是开眼界了,水平真是惊世骇俗啊。

有不同意见的我欢迎交流,至于满嘴喷粪的我劝你三思,这毕竟是我的地盘,到时候你辛苦半天喷出一大坨,我点点鼠标就给删了。你说到底是谁比较酸爽呢?


2.匿名用户(161赞)

如果说的是matlab整个产品,我觉得短时间内是不可能的。

如果是符号计算,matlab的确不行。
即使是matlab比较擅长的有大量矩阵和向量的数值计算,和一些优良的库相比,也不一定效率最高。
但是,matlab发展到今天,这些都不是matlab最重要的部分了。

matlab一直在推广的是model based design,来看个海报:

                               
登录/注册后可看大图

没错,mathworks在说,他家的软件结合model based design这种设计方法,辅助了一台火星探测器的设计。看到上面的海报里面说的380,000 simulations,你可能觉得这个设计方法中,matlab的产品的作用仅仅是仿真,但是这不一定,看下一个例子:


                               
登录/注册后可看大图

这个是个国内的例子,电动汽车的电源管理,注意上面的话:100% of code generated , 这里说的code是C语言代码,这些C代码的target device是嵌入式设备。
这就意味着那不仅仅是仿真了,模型是能够直接生成代码的。


所以,python要取代它。
除了数值计算。
需要开源社区设计出一个比较成熟的仿真软件。
而仿真软件还要能够支持code generation。
这本质上是一堆不同的编译器(嵌入式设备众多,还需要厂家的配合才行)。



PS:
1.
当初Cleve Moler设计matlab是帮学生减轻负担,避免他们去学Fortran(LINPACK)。但是,作为一个工程师的Jack的加入,肯定会把这个东西往工程上靠。那么数值计算是foundation,但是在这个foundation上如何发挥才是使得matlab不一样了的地方。
而这个Foundation的部分,可以在后续的release中慢慢地优化,使用更好的开源实现,或者是直接购买一些商业实现库。
但是,如果发挥出来的整个体系成了不可替代的了,那这就不仅仅是一个数学分析工具了,而是一个从开始的需求分析,模型验证,以及到实现,整个设计流程都包含的工程平台了。
2.
楼主说的不能web,如果要把matlab作为服务器端语言,我确实还没有看到类似的应用。但是,如果只是一些网络应用,比如web crawler,网上其实挺多的。
matlab里面有几个简单的网络接口函数,比如urlread可以读取网页,还有xmlread。
这个函数是用java的库写的,因为matlab里面是集成了JVM的,其实在你的matlab 代码里面可以直接调用java的libraries。
只是,这些属于undocumented范畴,这里有个网站就专门挖掘这些:
Undocumented Matlab


目前的web server一般都是动态生成html页面了。我确实还没有见到这方面的应用。
但是,如果是生称静态的html页面,那么matlab其实一直都可以。
Cleve Moler的博客其实使用matlab写的:
MATLAB Central
上面链接里是Cleve Moler的一篇博客,这片博客里面有图片,有代码,还有文字。
Cleve在写这样一篇博客的时候,其实只是写了一个m文件,里面有注释,在cell mode里面注明了各个地方的title。然后在editor里面publish。
在发布的过程中,matlab会把运行结果中的图也自动加入最后生成的html文件里(图片放在单独文件夹)。
在m文件中还支持Latex,这些会在生称的html被自动转换成文字或者公式的图片。

在那篇博客的文末的右边,有个 “get the matlab code”链接,你可以把它的m文件下载下来自己看下,然后自己发布一下,看看生称的html文件是怎样的。


3.
楼主说的脚本,其实matlab就是一种脚本语言。
这也是为什么它的调试会比较方便。
你不需要一个专门的入口,你可以从m文件的任何一个位置开始运行你的程序。
matlab的编辑器有一个cell mode,使用它,你可以把m中的任何一个你想要单独运行的部分放在一个cell里面,只执行这个cell。


另外,说到windows的操作。
在matlab里面可以直接执行dos命令。
所以在涉及到了windows的比较复杂一点的操作,可以用批处理写好batch,然后在matlab里面调用。
当然,你可以用matlab先生称一个batch,然后运行。

4.
最后,虽然matlab是一个商业软件。
但是在matlab这个商业平台上是有“开源社区”的。
matlab的File Exchange是一个很活跃的社区。


3.古十长(10赞)

虽然python里面有一个完全模仿matlab做的工具叫做spyder,然后里面有个包也是包含了各种类似matlab的函数,模仿到了甚至一些简单的功能matlab代码复制过去,根据python语法改一改,马上就可以用了;

但是,毕竟在一些别的方面matlab是这个领域最专业的,它里面内置了很多函数在python里面是不带有的,就算python有,但是也没有matlab快;再说了,matlab里面的simulink,神经网络工具箱,小波分析工具箱,或者现在2013版里面新引入的在射频电磁场方面仿真用的工具箱,这些别说python了,别的软件也不一定有matlab好使。。。

回头再看看题主的问题,你说matlab功能太单一了,那是你用matlab的功能用的还不多(其实也没有人可以用上matlab里面的所有功能。。。)

然后如果说不能做网站不能做脚本,那我只能说,题主,请注意,合适的问题请用合适的工具来完成,因为我常用C++,Python,Matlab,Mathematica等东西,但是对于某个我想做的功能,我都会选择最适合做这件事情的工具,而不是去想着怎么一招吃遍天;

哦,另外,说到脚本,其实matlab也差不多可以做类似的事情的,我就写过matlab改系统的各种东西,重命名MP3的各种东西,还有搬运漫画打包之类的小代码。。


4.
张贱(17赞)

以我曾经试图用python+各种包来代替matlab做一门机器学习方面的课为例子来说明一下即使用不到matlab里各种高级的仿真功能等等,python也不可能代替matlab:
这个课的作业大致就是一些PCA和LLE这样的线性非线性的降维技术,班上大多数理智的人都用了matlab,而我装逼情绪爆发用的是python,numpy+scipy+sklearn(前两个大概是最容易让大家以为matlab要被python代替的包了)。事实证明大家都异常轻松的作业把我折腾得够呛。例如在做一个矩阵特征分解的时候一个实对称矩阵愣是能给我分解出复数特征值来,最后查证是包里的bug……我觉得很难想象matlab这种商业软件会在这种常用函数里出bug。
当然即使抛去这些包里存在的各种bug,单单是写起来比matlab麻烦就够了,毕竟像高校里用matlab的人大多数都是用这货来发paper的研究生们。单单验证想法就别谈别的了,当然是写起来越简单越好。翻到paper的dl前两天写的matlab代码现在看看都觉得丑,那时候连a1a2a3这种丑陋的变量名都写得出来怎么还会有闲心关心python的缩进。
所以说,除非matlab大力打击盗版让盗版绝迹(这事儿貌似也不好弄),否则python是肯定搞不过它的。

------------------------------------------------------
最近脑袋反应比较迟钝,希望大家一起来讨论讨论。上次在我的那个帖子里面支持python那些也希望过来看看,不同的观点进行撞击才会有更好的收获!
最后给大家拜个早年,提前祝大家新年快乐!


评分

参与人数 1金钱 +14 贡献 +10 体力 +50 收起 理由
kongfeng0824 + 14 + 10 + 50 很给力!辛苦了!好好养病!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 14:17:02 | 显示全部楼层
    有时候感觉有些人总拿一些没有可比性的东西来比较真的是很无聊。举个不恰当的例子,比如非要比较PHP和C谁的Web开发能力强,这有啥意义啊。
    又譬如,一把瑞士军刀,非常锋利功能还多,还有一把菜刀,请问瑞士军刀能否代替菜刀?这个问题怎么回答?也许两把刀都能切菜,但是能说瑞士军刀比菜刀好用?瑞士军刀能开酒瓶,也许用菜刀也行,但是感觉一般人不会非要挑菜刀来做这个工作吧~
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-2-17 10:29:37 | 显示全部楼层
本帖最后由 burf 于 2015-2-17 10:35 编辑

计算机语言不能说绝对的优劣之分(除非那种太过时太老的),主要还是看用户想要做什么、怎么做。matlab发展了这么多年,而且还是商业软件,必然有其实力雄厚的地方以及广大的用户群,而python毕竟没有matlab发展时间长。没有必要说什么python会取代matlab之类的话,谁都无法取代谁,各有所长而已。最终还是看用户自己的喜好。
比如我就喜欢python,为什么呢?首先因为下个matlab还要去搞破解太麻烦。其次matlab真吃内存,在电脑没加内存之前我一开matlab就卡,甚至蓝屏,而python则没有。再次,python的开源特性给人一种“挑战权威”的感觉,就是说“普通人的努力也能比得过大公司”,当然这一点有我的主观倾向。最后,写python代码的时候可以玩一些有趣的小聪明。比如这是我拿python画的雷达基数据反射率三维示意图,虽然数据还没处理好,不过感觉还不错。这种玩小聪明得到的结果会给人巨大的成就感。
图片4-001.jpg
另外就兼容性来说,很多人都说python对各种语言的兼容性比较好,我没有试过别的语言,所以这里不发表评论。不过之前有段时间在写f2py的代码,觉得确实简洁方便,很大程度的提高了运算效率。还有上面文中所说的matlab的一些神经网络库之类的。python也有,pybrain就是个例子。

最后总结一下吧,作为一个python用户,我最大的体会就是:这门语言总是会带给我惊喜。这种惊喜来自于python的花样编程、来自于偶然间发现的某个包中的某个神奇的函数,来自于某个时刻脑海中闪过的一个火花所带来的(绘图、数据处理上的)点子。这些惊喜推动我不断深入,然后发现更多的惊喜。
That's why I love python。
And I love matlab, too, not kidding

评分

参与人数 1金钱 +10 贡献 +3 收起 理由
二爷名声在外 + 10 + 3 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-2-17 08:16:39 | 显示全部楼层
想想找bug这种事情还是只相信官方的一些库吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 08:18:33 | 显示全部楼层
二爷出品了。赞一个啊!
python matlab R 都用过。主要还是看是干哪一行的吧。
做研究、科学计算,个人觉得电脑可以的话还是matlab省力。
12年研究了三个月的python真的如帖子所说,到处找library,出问题了真的不知道该着谁。
还有python2.5 与python3.0以后的版本还有少许的语法差别。哎~~~~都是泪啊!
现在我主要用python做点儿预处理啊后处理呀啥的小工作,还是挺省劲的(ps:研究是不让装盗版软件,matlab只能在我的小本本上跑)这个时候python的好处就显现了。
还有就是ESRI的arcgis不再支持vba开始用python了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2015-2-17 08:36:38 | 显示全部楼层
又是那隻貓 发表于 2015-2-17 08:16
想想找bug这种事情还是只相信官方的一些库吧

file exchange上面还是有很多好东西的,都可以去找找看…
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2015-2-17 08:41:13 | 显示全部楼层
ningking1986 发表于 2015-2-17 08:18
二爷出品了。赞一个啊!
python matlab R 都用过。主要还是看是干哪一行的吧。
做研究、科学计算,个人觉 ...

我感觉有一句话说的很到位:Matlab不是给程序员用的,是给工程师用的…matlab在数据计算和建模方面的确有着不可替代的优势,但是不得不承认一点:速度慢!我用C++几分钟干好的,Matlab给我用了一天多…也如你所说的,Matlab占用内存很大,毕竟还有一个JAVA虚拟机在那里。这就是没有十全十美的软件,只有靠我们不断的去挖掘,去创造…
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 09:01:21 | 显示全部楼层
二爷名声在外 发表于 2015-2-17 08:41
我感觉有一句话说的很到位:Matlab不是给程序员用的,是给工程师用的…matlab在数据计算和建模方面的确有 ...

嗯。速度慢也是matlab的缺点之一。二爷推荐本C++的参考书啊? 我的C学的算可以,但是面向对象的C++没有深入接触过。介绍下学习经验啊!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 09:35:10 | 显示全部楼层
我们R圈的好多人 都已经叛逃到了python阵营了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 10:30:11 | 显示全部楼层
burf 发表于 2015-2-17 10:29
计算机语言不能说绝对的优劣之分(除非那种太过时太老的),主要还是看用户想要做什么、怎么做。matlab发展 ...

当然说再多我也没有女朋友就是了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-2-17 11:09:36 | 显示全部楼层
什么都不懂,来膜拜一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表