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

2013-05-19 05:27:09 +08:00
 cassyfar
之前很少使用python,
想问下对于大量数据的科学计算,比如machine learning,V2EX里有人使用python来实现算法吗?python实现的程序执行速度和C实现,以及MATLAB实现的,有什么差距呢?
另外numpy对于数组和矩阵的处理有MATLAB方便吗?
谢啦。
13900 次点击
所在节点    Python
23 条回复
kfll
2013-05-19 05:37:11 +08:00
后端一般都是MP/MPI+C和Fortran
前端看到的多数是Python...

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

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

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

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

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

但是想锻炼自己的编程能力,可以上Python。如果只是做研究,直接matlab把。
empilot
2013-05-19 22:13:49 +08:00
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
2013-05-19 23:50:13 +08:00
@empilot 是的,使用MatLab仍旧偏向循环处理每一条数据,那就好比在数据库中放弃了sql语句而使用cursor来计算数据。建议是在更粗粒度上进行处理。
Ricepig
2013-05-19 23:51:14 +08:00
@empilot 并且,MatLab的内置矩阵操作和运算是极为优化的,手写代码一般是没有它快的
sectic
2013-05-20 01:11:35 +08:00
大,很大,前段时间做图像,还有一些相关的计算,算了一下,c比python快很多很多。
而且论文的话,一般要求是c和 matlab。
sectic
2013-05-20 01:13:49 +08:00
矩阵的话,只是计算的话用一个单列list就够用了。numpy的变换完接下来不好做。
yyai3
2013-05-20 09:14:22 +08:00
正要学习scikit-learn 有什么好的建议么?
ruoran
2013-05-20 09:41:13 +08:00
我感觉numpy scipy matplotlib 的组合是强于matlab的。python性能肯定不如c,所以实在追求性能可以用c写一部分性能需求高的,然后用python调用吧。
FYI,https://news.ycombinator.com/item?id=363096
empilot
2013-05-20 12:43:57 +08:00
Python 在这方面的应用发展,从我订阅的Enthought的Newsletter来看也在不断发展中。
https://www.enthought.com/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/69355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX