Python不适合researcher用么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
freeznet
V2EX    Python

Python不适合researcher用么

  •  
  •   freeznet 2013-11-30 14:22:12 +08:00 7817 次点击
    这是一个创建于 4402 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天交了一门课的final project,主要是对一个算法A的研究和implementation,然后为了起对比效果,所以用python实现了算法a,同时和实现了一个类似的算法b
    然后昨天做简短的presentation的结束后,老师说他觉得python是不适合用来做research的,推荐今后的coding都使用c/c++
    由于我用python的时候也考虑了一些问题,就选用了pypy来跑,不过还是不明白为什么一定推荐用c/c++
    61 条回复    2014-09-17 22:06:37 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       2013-11-30 14:38:43 +08:00   1
    人对于自己不熟悉的东西就会排斥,很正常,不过还是为你们老师觉得难过。
    Mutoo
        2
    Mutoo  
       2013-11-30 14:40:43 +08:00
    python 绝对是一门 science friendly 语言。有很多很强大的科学库,例如 numpy 。做 NLP 也是一流的。
    9hills
        3
    9hills  
       2013-11-30 14:56:26 +08:00
    用性能数据打脸
    freeznet
        4
    freeznet  
    OP
       2013-11-30 14:59:32 +08:00
    @Mutoo 的确,我的很多作业都是依托numpy,scipy,虽然作业上老师都会推荐用matlab/octave

    @Livid 当时从老师的反馈中得到的意思大致是他觉得python跑出的结果可能会更难被认同,不过他对我们跑出的结果还是很惊喜,也表示出了好奇= =
    freeznet
        5
    freeznet  
    OP
       2013-11-30 15:00:19 +08:00
    @9hills 他的确对我们的性能表示惊喜= =所以要了代码和TA研究了...
    oloopy
        6
    oloopy  
       2013-11-30 17:03:30 +08:00
    做个猜测。Python适合research,但是对于某些specific的课程,Python会不利于与其他人交流。如果老师站在学生的角度,非常有可能做出这样的推荐,更多的用common language完成作业,并参与讨论。
    lalalakakaka
        7
    lalalakakaka  
       2013-11-30 22:32:11 +08:00   2
    @freeznet

    直接问你们老师:我买不起matlab怎么办?学校提供正版matlab授权吗?
    freeznet
        8
    freeznet  
    OP
       2013-11-30 22:35:35 +08:00
    @lalalakakaka 所以有推荐用octave咯
    acheng
        9
    acheng  
       2013-12-01 00:23:54 +08:00
    C++王道 以后你会明白的 当你做research 处理海量数据的时候 你才会发现py什么的脚本语言都是屎
    那些numpy 或pypy 都是浮云
    freeznet
        10
    freeznet  
    OP
       2013-12-01 00:40:08 +08:00
    @acheng 并没有拒绝说用c/c++ 只是我觉得使用python更容易实现算法,如果需要处理海量的数据,也自然会选用c/c++,也不至于说脚本语言对于处理海量数据是屎吧= =
    acheng
        11
    acheng  
       2013-12-01 00:44:33 +08:00   1
    @freeznet 你确定用py处理过海量数据? 你目前处理的最大量数据是多少GB?
    csslayer
        12
    csslayer  
       2013-12-01 01:30:40 +08:00
    _> 我这边搞 PL research 的都用 Python 你说呢……
    Kabie
        13
    Kabie  
       2013-12-01 01:42:50 +08:00
    毕竟你们是纯粹的算法课程吧?…………老师估计是担心在算法之外……动态语言本身对性能会有影响……
    9hills
        14
    9hills  
       2013-12-01 01:51:42 +08:00 via Android
    @acheng ca 又把回复点成感谢了。。。


    我用python处理过 1PB的数据。。。你的单位还停留在gb....
    acheng
        15
    acheng  
       2013-12-01 02:05:15 +08:00
    @9hills 你牛逼 时间花了多久?
    binux
        16
    binux  
       2013-12-01 02:35:27 +08:00
    @acheng 每天用着awk处理着上PB数据觉得python算什么。。。
    davepkxxx
        17
    davepkxxx  
       2013-12-01 02:41:11 +08:00
    搞 research 还是用 C/C++ 吧,很多 Project 对性能要求很高。
    acheng
        18
    acheng  
       2013-12-01 03:27:14 +08:00
    @binux 牛逼 PB数据 都是啥数据呀
    wwqgtxx
        19
    wwqgtxx  
       2013-12-01 06:50:40 +08:00 via Android
    @acheng 我会告诉你googlecode是用python写的么?这个数据量够大了吧!
    bombless
        20
    bombless  
       2013-12-01 09:07:11 +08:00
    我觉得 numpy 这些就类似 matlab 之类的那几款数学软件,是为了给用户提供一个方便的界面来使用
    如果整个研究是你自己在做一套系统,那 numpy 这样的例子并不合适
    C++ 有模板元编程,运算符重载,类型系统这样很方便的特性
    对性能有要求的场合还有 Intel Parallel , C++ AMP 这样的工具
    这些都是 Python 所没有的
    FrankFang128
        21
    FrankFang128  
       2013-12-01 09:08:15 +08:00 via Android
    楼主有点断章取义
    binux
        22
    binux  
       2013-12-01 09:19:28 +08:00
    @acheng 链接库,网页库。。
    wuxqing
        23
    wuxqing  
       2013-12-01 10:17:12 +08:00
    python + c/c++ 就可以了
    9hills
        24
    9hills  
       2013-12-01 11:04:41 +08:00 via Android
    @acheng 上千台机器的hadoop 跑起来的,用机器资源换速度。

    很多时候重点是开发速度。c实在是太慢了

    不过纯粹速度上来说,pypy也很快,不能以老眼光看python
    acheng
        25
    acheng  
       2013-12-01 11:06:56 +08:00
    @9hills 你那是有硬件资源啊。。。。 普通的人 比如楼主搞科研 哪有那么多资源 哈哈
    notte
        26
    notte  
       2013-12-01 11:26:14 +08:00   2
    cpp有雄厚的资源积累,research很多都是交叉学科的,相互之间沟通用通用的语言最好,像数值分析有Numerical.Recipes (C++)就没有python。
    大数据处理也不是比谁的数据bit大,得看你要用那数据干什么,像混合整数非线性规划导入上GB的数据用c++也得算N年。
    matlab的工具箱多,科研界很多新算法都是文献一出就附上matlab的工具箱了,这样后面的人看到文献后马上就可以用。
    话说楼主你应该看文献少吧,多看看别人都用什么,做research不是在工具上标新立异,而是在思想上。学术界跟工业界是两码事。
    acheng
        27
    acheng  
       2013-12-01 11:30:00 +08:00
    @notte 行家 你说到点子上了。

    我处理8G的数据 i5戴尔台式4G内存 跑3天3夜。
    wodemyworld
        28
    wodemyworld  
       2013-12-01 16:41:05 +08:00
    @acheng 别动不动就说什么语言是屎,nb你也写个python出来啊,不懂别瞎bb,以前youtube也是python写的,也没见效率低啊,自己能力挫别怪运行时慢

    numpy都是c语言实现,代码都是高度优化的,做科学计算一点问题没有,性能很高,你如果说numpy效率低,请你用c++实现和numpy一样的算法,然后比较一样两者效率,你就用cpython运行时就行,连pypy都用不着

    通常不用管语言层面的效率问题,不要把科学研究整成写代码的工作,算法才是核心,我就用python+c,Cpython运行时执行效率低的方法用C语言实现,然后用python调用,如果纯C写,编写代码时间就多了去了
    sumrin
        29
    sumrin  
       2013-12-01 19:34:50 +08:00
    伟大的C BS 你们用python !!用ASP 路过
    Ricepig
        30
    Ricepig  
       2013-12-01 21:22:30 +08:00
    老师说的很对,目前来说在research领域基本还是C/C++是主流,而且很多软件的第一扩展语言都是它们。

    从另一个角度看,你如果是项目负责人,你可以规定别人全都用python,但是在你还是螺丝钉的时候,就不要要求其他人都迁就你了。也就是说,你可能还没有牛到可以左右方案(语言)选择的层次,所以,忍忍吧少年。

    最后,python提供的语法便利性,在你需要从底层实现一个高效的算法的时候,并没有它作为“粘合剂”时那么大。如果只是调用某个库,那是另外一回事。但是作为科学研究来说,C/c++的库我想也是比python的库多吧。
    Ricepig
        31
    Ricepig  
       2013-12-01 21:23:48 +08:00
    @wodemyworld 这位兄台,说法不是很有说服力啊。我不养猪我还不能说猪肉不好吃了?
    ispinfx
        32
    ispinfx  
       2013-12-01 22:57:38 +08:00 via Android
    @Ricepig 是不吃猪就不要说猪肉不好吃了
    Ricepig
        33
    Ricepig  
       2013-12-02 00:58:24 +08:00   1
    @ispinfx 你的类比更不贴切一点。我的类比中,用“养猪”类比“创造语言”,用“吃猪肉”类比“使用语言”。我回的贴中,逻辑是“你在创造不出python之前,就不能说python不行”,所以我说“我不养猪就不能说猪肉不好吃了”

    供你参考。
    acheng
        34
    acheng  
       2013-12-02 01:50:52 +08:00
    @wodemyworld 试问你处理的数据量级是? 我以德服人 就不骂你了
    RIcter
        35
    RIcter  
       2013-12-02 07:49:59 +08:00
    @acheng 喜闻乐见黑我大python。话说你为什么说py是屎,我还说cpp是屎。真无趣。
    wodemyworld
        36
    wodemyworld  
       2013-12-02 08:52:09 +08:00
    @acheng 我做神经算法,训练data规模,120亿关联数据

    你不要提德,你算以贱服人,见东西就咬的那种
    acheng
        37
    acheng  
       2013-12-02 08:57:21 +08:00
    @wodemyworld 牛逼人啊 神经算法 怎么感觉你也神经了 我只是说py是屎而已 你却骂人 如果你骂C++是屎 我也不会骂你是贱人的 我打算学习py了 大侠 对于新手来说 学py2 还是py3 呢?
    wodemyworld
        38
    wodemyworld  
       2013-12-02 08:58:29 +08:00
    @Ricepig 我已经说了,通常python+c,真正遇到效率问题的时候核心算法改为c代码;
    c库多是因为c语言比python早出来好几十年,并不是c语言有多么让人离不开,现在大学里都用matlab了,效率还可以而且学起来很方便,你要说非得追求效率,等你把一个算法用c写出来的时候,人家用matlab连paper都出了,如果你的算法可以并行执行,那么还得做分布式计算,如果你用c去手工实现,等你把分布式框架都做完了,人家早就毕业了,怎么省事怎么来,做科学研究的人不是十分必要的话,不要往码农上面靠,没好处,着眼点就不对
    acheng
        39
    acheng  
       2013-12-02 09:02:43 +08:00
    @wodemyworld 有道理 不过我觉得用C/C++把基础库打好了 后续科研 不需要花很多时间去当码农了 只是起步阶段确实比matlab慢几拍 但是过了那个坎儿之后 顿时会觉得还是比matlab高端大气上档次 如果只是用matlab 面对海量数据的时候 那叫一个慢 有想法也难以实现
    wodemyworld
        40
    wodemyworld  
       2013-12-02 09:06:26 +08:00
    @acheng 你说py是屎,那我和导师用的全是屎了?创造一门语言不是你想的那么简单,存在即有他存在的道理,我同学在MIT他们在学校学习的编程语言就是python(最早是lisp),那你认为MIT那些教授们选择python是因为它屎么?自己不懂可以问,不要不懂装懂说某某屎

    ps1:“神经算法”没写清楚,是人工神经网络训练算法

    ps2:建议学py2,还是有很多库尚未迁移到py3(例如Gevent),另外一些在py3还有bug;平时建议py2+C混用
    acheng
        41
    acheng  
       2013-12-02 09:14:14 +08:00
    @wodemyworld 今年在MIT学习了一周 他们py matlab 用得较多,我还是坚持用C++搞定了小组的项目。 py 的缩进 不习惯。。。 我想学习py主要用来搞定网络方面的程序。至于计算方面,还是调用lapack靠谱,不知py读取文件的效率如何呢

    看来这里牛逼人挺多啊 我以后再也不装了
    est
        42
    est  
       2013-12-02 09:32:05 +08:00
    C/C++ python 都靠边站。做算法的,VC++6才是主流。Turbo Pascal 都能爆你们三条街。
    ispinfx
        43
    ispinfx  
       2013-12-02 11:44:56 +08:00
    @Ricepig 嗯。我俩针对的回复的句子有所不同。谢指教。
    ling0322
        44
    ling0322  
       2013-12-02 13:52:08 +08:00
    可以参照一下 http://radimrehurek.com/2013/10/parallelizing-word2vec-in-python/ 用Python+C实现的word2vec比谷歌纯C实现快了2.8倍

    感觉Python速度快,喜欢先用Python测试效果,最后再用C++实现(
    luikore
        45
    luikore  
       2013-12-02 16:10:17 +08:00
    靠谱老师都会跟你说: 用你喜欢的语言.
    语言的性能差异在使用者的资质差异面前就是个无穷小量.
    Ricepig
        46
    Ricepig  
       2013-12-02 17:44:20 +08:00
    @wodemyworld 我其实没有怎么提到效率问题,我强调的是C/C++在“当前”业界的普及状态,作为一种大家都懂大家都用的公共语言。这点是python无法做到的。以后的事情以后再说。i

    你得考虑大家(同行、评审、同事)懂不懂,和现有的一些资源能不能对接

    就这几点来说,python劣势是很明显的。

    再重复一遍:python提供的语法便利性,在你需要从底层实现一个高效的算法的时候,并没有它作为“粘合剂”时那么大。有的时候,科学研究,一般偏向于“核心”,“底层”,而不是那么偏向“粘合剂”
    wodemyworld
        47
    wodemyworld  
       2013-12-02 19:10:14 +08:00
    @Ricepig 不在企业供职,不知道researcher算是哪个业界的,我狭义的理解为在做科学研究的人员。。。。。

    你说的可能是企业吧,在企业老板说了算,让你用哪个就用哪个
    Ricepig
        48
    Ricepig  
       2013-12-02 20:43:08 +08:00
    @wodemyworld 我说的就是研究人员,你看一下paper里的代码,除了伪代码,基本都是类C代码(当然要去除语言方面的paper)。

    企业是另一回事情,但是在科研的时候,和大家用差不多的语言、环境,能够更容易获得认同吧。

    除非真的牛到藐视众生的程度,否则还是需要用大家都熟悉的东西吧。

    最后,无论是R还是Matlab,c和c++对接都很方便,但是其他语言就不一定了。
    wodemyworld
        49
    wodemyworld  
       2013-12-02 20:57:03 +08:00
    @Ricepig 在国内这种大环境下,你只能”哎“,重数量不重质量的paper,好像回到了高考,必须得用判卷老师熟悉的解题方法

    科研这条路只有极少数人走到最后,自己”学“东西最重要;paper里用的什么语言真心没人关心,能看懂就行,谁也不会把整个代码往上贴,除非你是做“工程”的
    Ricepig
        50
    Ricepig  
       2013-12-02 21:08:09 +08:00
    @wodemyworld 国外不是也一样么,你用评审不熟悉的语言,评审会质疑你。

    科研这条路,不是“学”东西最重要,而是自己有新东西最重要。

    Paper里语言还是比较重要的,论文是不是能被评审理解。

    不会把整个代码向上贴不代表不会贴代码,这点区别我想应该区分清楚。
    Hualin
        51
    Hualin  
       2013-12-02 23:40:16 +08:00
    不要在意用什么工具,重要的是用这个工具做了什么。这话题吵着吵着就开骂了,敢问都发了几篇有意义的论文,看我能搜着你的宏图巨作不 呵呵呵
    cadmuxe
        52
    cadmuxe  
       2013-12-03 10:41:19 +08:00
    看应用场景啦。听起来楼主是学cs的,研究算法什么的? 老师那么说是有道理的。毕竟用c能接触更底层。但是直接扩展到researchers 那就不好说了,什么自然语言处理,生物学,等等专业的研究人员,很多都用python。简单易用么。
    maxiaojun
        53
    maxiaojun  
       2013-12-13 00:08:27 +08:00
    有些C/C++使用者人力吐槽,你告我C++怎split一std::string好?

    另外,在前的前,有人了1行C++的代,果理第100的候就segmentation fault了
    maxiaojun
        54
    maxiaojun  
       2013-12-13 00:23:22 +08:00
    真回答,除了系底的research,我得一般用high level languages肯定更容易抓住的重啊。竟C/C++暴露的程序的性能,安全性等可能很重要,但是和算法啥啊。的例子,有算法心整是int是long long?

    有些算法研究者乾脆只管明,也得搞。反明言不是什太大的。

    然社也是很重要的因素,全球看,Python的社并不差啊,用的人有的是,工具有的是。C/C++然使用人很多,但似乎各自政、不成社,然工具也不少。然MATLAB是另一以商件中心的社。
    gundamlh
        55
    gundamlh  
       2013-12-13 20:07:06 +08:00
    @acheng 你在美国什么学校?
    acheng
        56
    acheng  
       2013-12-14 03:01:49 +08:00
    @gundamlh 垃圾学校 不提也罢
    wangyongbo
        57
    wangyongbo  
       2013-12-16 22:37:16 +08:00
    搞研究的都好 牛逼啊。膜拜啊,五体投地。
    chenzhao
        58
    chenzhao  
       2014-09-17 20:27:02 +08:00   1
    哪个老师?
    freeznet
        59
    freeznet  
    OP
       2014-09-17 21:20:37 +08:00
    @chenzhao 额~raymond啦~
    chenzhao
        60
    chenzhao  
       2014-09-17 21:50:45 +08:00
    @freeznet 估计是因为他们比算法的时候用py容易出现很大波动,倒可以理解。
    freeznet
        61
    freeznet  
    OP
       2014-09-17 22:06:37 +08:00
    @chenzhao 扶额 你把我快一年前的帖子翻出来...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5057 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 08:35 PVG 16:35 LAX 00:35 JFK 03:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86