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 · 7174 次点击
    这是一个创建于 4012 天前的主题,其中的信息可能已经有所发展或是发生改变。
    昨天交了一门课的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
       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   ·   实用小工具   ·   2796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:42 · PVG 19:42 · LAX 03:42 · JFK 06:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.