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
cassyfar
V2EX  ›  Python

Python在科学计算中和C比较,性能差距大吗

  •  
  •   cassyfar · 2013-05-19 05:27:09 +08:00 · 14149 次点击
    这是一个创建于 4244 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前很少使用python,
    想问下对于大量数据的科学计算,比如machine learning,V2EX里有人使用python来实现算法吗?python实现的程序执行速度和C实现,以及MATLAB实现的,有什么差距呢?
    另外numpy对于数组和矩阵的处理有MATLAB方便吗?
    谢啦。
    第 1 条附言  ·  2013-05-20 14:44:53 +08:00
    我理解楼下各位意思是python在科学计算中实际是属于胶水作用
    python调用的各种库都是用C实现的...

    我决定先不移植到python上了 把这个时间拿来用openmp实现下parallel computing
    23 条回复    2018-04-04 09:29:04 +08:00
    kfll
        1
    kfll  
       2013-05-19 05:37:11 +08:00   ❤️ 1
    后端一般都是MP/MPI+C和Fortran
    前端看到的多数是Python...

    PS: CADD领域
    y
        2
    y  
       2013-05-19 06:16:44 +08:00   ❤️ 1
    估计还是 Matlab 处理矩阵运算厉害些。

    代数相关的领域,用 SAGE 的人很多,这个完全是基于 Python 的, 可能有些关键部分用 C 优化过。
    cassyfar
        3
    cassyfar  
    OP
       2013-05-19 06:20:03 +08:00
    @kfll 你们是不是有C或Fortran实现的library 然后python只是用来调用那些API吗?
    cassyfar
        4
    cassyfar  
    OP
       2013-05-19 06:54:00 +08:00
    @y matlab对于循环处理太慢...
    下了个SAGE看了下,他的优势是不是在于built-in functions?感觉性质和matlab等数学辅助工具一样吧
    chemhack
        5
    chemhack  
       2013-05-19 07:03:55 +08:00   ❤️ 1
    做machine learning如果你数据量大的话,也不需要并行计算,一般的瓶颈在磁盘IO。CPU密集型的计算python跟c有数量级的差距。

    @kfll 在超算上跑python被人嘲笑的感觉就跟买了个mbp retina装了个windows XP一样,还是电脑城装机版的。PS,simulation领域
    cassyfar
        6
    cassyfar  
    OP
       2013-05-19 07:12:13 +08:00
    @chemhack python性能差距这么大... 想使用python的初衷是看到Python上有scipy和matplotlib,以为处理跑出来的数据会方便不少
    现在磁盘IO应该还没到 也是单thread在跑 主要是循环的周期太长 用Matlab一个周期要1小时多...
    y
        7
    y  
       2013-05-19 08:38:49 +08:00
    @cassyfar Sage 对于椭圆曲线非常友好。别的我不太清楚。一开始就是一些数论类的计算。
    xiaoxuxu
        8
    xiaoxuxu  
       2013-05-19 13:49:04 +08:00   ❤️ 1
    numpy/scipy底层都是纯C的,性能不会比matlab差。scikit-learn, genism等都是建立在numpy/scipy之上。python只是提供了一个胶水层。另外纯python部分也可以再用pypy jit一下,性能相当可观
    xiaochong
        9
    xiaochong  
       2013-05-19 14:43:15 +08:00   ❤️ 1
    不论性能,对于代码表达而言,numpy中主要类型是多维数组(可高于二维),matlab的主要类型是矩阵(二维,更加符合线性代数的表达),之前多用matlab,个人感觉matlab的表达更直接一些。

    个人认为,python的优点在于其是免费的(octave http://www.gnu.org/software/octave/ 算是免费的matlab),而且与matlab的差距不大,因此越来越流行。
    luikore
        10
    luikore  
       2013-05-19 14:47:00 +08:00   ❤️ 1
    scipy足够快了,不够快的自己把瓶颈处算法改改,比换语言更有效
    chichan
        11
    chichan  
       2013-05-19 16:37:36 +08:00   ❤️ 1
    非常大,但是你可以用 numpy/scipy 获得优异的性能来解决这个问题,另外 numpy/scipy+matplotlib 的组合不输给 matlab,在很多地方上甚至超过它
    Ranler
        12
    Ranler  
       2013-05-19 21:02:46 +08:00   ❤️ 1
    之前模式识别的课程实验就用Sage(http://www.sagemath.org/)做的。。。

    总体来说Sage不如matlab方便,比较小众,文档肯定也没matlab全。
    性能还可以,如果不够的化可以再用的IntelCC重新编译numpy模块来实现CPU指令级(扩展指令集)的矩阵运算加速。

    但是想锻炼自己的编程能力,可以上Python。如果只是做研究,直接matlab把。
    empilot
        13
    empilot  
       2013-05-19 22:13:49 +08:00   ❤️ 1
    MATLAB是一种解释性语言,所以在运行效率上不如C,特别是在有循环的地方。
    因为我曾经用matlab做过多重循环的算法,确实很慢。
    于是,我看了这篇文章:http://web.cecs.pdx.edu/~gerry/MATLAB/programming/performance.html
    主要是从三方面入手:
    - Using vector operations instead of loops
    - Pre-allocating memory for vectors and matrices
    - Correct code is most important
    后来,我将原本一段耗时约500秒运行的matlab程序,用C编译后再运行,结果变快了10秒。
    下面是我本科时“小打小闹”的一篇相关文章:
    http://em-pilot.appspot.com/2010/05/27/ImprovingMatlabCalculations.html
    以上仅供参考,不知道是否有用...
    Ricepig
        14
    Ricepig  
       2013-05-19 23:50:13 +08:00   ❤️ 1
    @empilot 是的,使用MatLab仍旧偏向循环处理每一条数据,那就好比在数据库中放弃了sql语句而使用cursor来计算数据。建议是在更粗粒度上进行处理。
    Ricepig
        15
    Ricepig  
       2013-05-19 23:51:14 +08:00
    @empilot 并且,MatLab的内置矩阵操作和运算是极为优化的,手写代码一般是没有它快的
    sectic
        16
    sectic  
       2013-05-20 01:11:35 +08:00 via iPhone   ❤️ 1
    大,很大,前段时间做图像,还有一些相关的计算,算了一下,c比python快很多很多。
    而且论文的话,一般要求是c和 matlab。
    sectic
        17
    sectic  
       2013-05-20 01:13:49 +08:00 via iPhone
    矩阵的话,只是计算的话用一个单列list就够用了。numpy的变换完接下来不好做。
    yyai3
        18
    yyai3  
       2013-05-20 09:14:22 +08:00
    正要学习scikit-learn 有什么好的建议么?
    ruoran
        19
    ruoran  
       2013-05-20 09:41:13 +08:00   ❤️ 1
    我感觉numpy scipy matplotlib 的组合是强于matlab的。python性能肯定不如c,所以实在追求性能可以用c写一部分性能需求高的,然后用python调用吧。
    FYI,https://news.ycombinator.com/item?id=363096
    empilot
        20
    empilot  
       2013-05-20 12:43:57 +08:00   ❤️ 1
    Python 在这方面的应用发展,从我订阅的Enthought的Newsletter来看也在不断发展中。
    https://www.enthought.com/
    middleware
        21
    middleware  
       2013-05-20 14:32:13 +08:00   ❤️ 1
    @ruoran 说的是正解。像矩阵运算,解线性方程,FFT 这些东西无论如何都得用 C 写(或者用现成的,比如 Intel MKL)。Python 顶多写写 top-level 准备数据的胶水代码。
    Ricepig
        22
    Ricepig  
       2013-05-20 14:54:58 +08:00 via iPhone
    @ruoran 感觉有的时候是不可靠的,有客观比较更好
    wizardforcel
        23
    wizardforcel  
       2018-04-04 09:29:04 +08:00
    NumPy 里面用了 C 的共享库。

    而且 C 的代码里用了 SIMD,否则你用普通的指令还是慢。

    Matlab 同理。

    不过 Python 有个好处就是,你没必要用 C 来提升速度,它的一种方言 Cython 也可以。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.